mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 08:38:32 +02:00
Add linewrap option 'auto' (#1507)
* Add linewrap option 'auto' * Specify the exception thrown * Add BDD test * Specify name instead of number * Create test for linewrap auto and fancy format * Fix linewrap auto for fancy format
This commit is contained in:
parent
252c63f4dd
commit
80bfff384e
5 changed files with 66 additions and 7 deletions
|
@ -101,7 +101,8 @@ If `true`, tags will be highlighted in cyan.
|
||||||
|
|
||||||
### linewrap
|
### linewrap
|
||||||
Controls the width of the output. Set to `false` if you don't want to
|
Controls the width of the output. Set to `false` if you don't want to
|
||||||
wrap long lines.
|
wrap long lines. Set to `auto` to let `jrnl` automatically determine
|
||||||
|
the terminal width.
|
||||||
|
|
||||||
### colors
|
### colors
|
||||||
A dictionary that controls the colors used to display journal entries.
|
A dictionary that controls the colors used to display journal entries.
|
||||||
|
|
|
@ -2,12 +2,14 @@
|
||||||
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
import ansiwrap
|
import ansiwrap
|
||||||
|
|
||||||
from jrnl.color import colorize
|
from .color import colorize
|
||||||
from jrnl.color import highlight_tags_with_background_color
|
from .color import highlight_tags_with_background_color
|
||||||
|
|
||||||
|
|
||||||
class Entry:
|
class Entry:
|
||||||
|
@ -104,6 +106,18 @@ class Entry:
|
||||||
)
|
)
|
||||||
|
|
||||||
if not short and self.journal.config["linewrap"]:
|
if not short and self.journal.config["linewrap"]:
|
||||||
|
columns = self.journal.config["linewrap"]
|
||||||
|
|
||||||
|
if columns == "auto":
|
||||||
|
try:
|
||||||
|
columns = os.get_terminal_size().columns
|
||||||
|
except OSError:
|
||||||
|
logging.debug(
|
||||||
|
"Can't determine terminal size automatically 'linewrap': '%s'",
|
||||||
|
self.journal.config["linewrap"],
|
||||||
|
)
|
||||||
|
columns = 79
|
||||||
|
|
||||||
# Color date / title and bold title
|
# Color date / title and bold title
|
||||||
title = ansiwrap.fill(
|
title = ansiwrap.fill(
|
||||||
date_str
|
date_str
|
||||||
|
@ -114,7 +128,7 @@ class Entry:
|
||||||
self.journal.config["colors"]["title"],
|
self.journal.config["colors"]["title"],
|
||||||
is_title=True,
|
is_title=True,
|
||||||
),
|
),
|
||||||
self.journal.config["linewrap"],
|
columns,
|
||||||
)
|
)
|
||||||
body = highlight_tags_with_background_color(
|
body = highlight_tags_with_background_color(
|
||||||
self, self.body.rstrip(" \n"), self.journal.config["colors"]["body"]
|
self, self.body.rstrip(" \n"), self.journal.config["colors"]["body"]
|
||||||
|
@ -123,7 +137,7 @@ class Entry:
|
||||||
colorize(
|
colorize(
|
||||||
ansiwrap.fill(
|
ansiwrap.fill(
|
||||||
line,
|
line,
|
||||||
self.journal.config["linewrap"],
|
columns,
|
||||||
initial_indent=indent,
|
initial_indent=indent,
|
||||||
subsequent_indent=indent,
|
subsequent_indent=indent,
|
||||||
drop_whitespace=True,
|
drop_whitespace=True,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# Copyright (C) 2012-2022 jrnl contributors
|
# Copyright (C) 2012-2022 jrnl contributors
|
||||||
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
# License: https://www.gnu.org/licenses/gpl-3.0.html
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
from textwrap import TextWrapper
|
from textwrap import TextWrapper
|
||||||
|
|
||||||
from jrnl.exception import JrnlException
|
from jrnl.exception import JrnlException
|
||||||
|
@ -36,7 +38,22 @@ class FancyExporter(TextExporter):
|
||||||
def export_entry(cls, entry):
|
def export_entry(cls, entry):
|
||||||
"""Returns a fancy unicode representation of a single entry."""
|
"""Returns a fancy unicode representation of a single entry."""
|
||||||
date_str = entry.date.strftime(entry.journal.config["timeformat"])
|
date_str = entry.date.strftime(entry.journal.config["timeformat"])
|
||||||
linewrap = entry.journal.config["linewrap"] or 78
|
|
||||||
|
if entry.journal.config["linewrap"]:
|
||||||
|
linewrap = entry.journal.config["linewrap"]
|
||||||
|
|
||||||
|
if linewrap == "auto":
|
||||||
|
try:
|
||||||
|
linewrap = os.get_terminal_size().columns
|
||||||
|
except OSError:
|
||||||
|
logging.debug(
|
||||||
|
"Can't determine terminal size automatically 'linewrap': '%s'",
|
||||||
|
entry.journal.config["linewrap"],
|
||||||
|
)
|
||||||
|
linewrap = 79
|
||||||
|
else:
|
||||||
|
linewrap = 79
|
||||||
|
|
||||||
initial_linewrap = max((1, linewrap - len(date_str) - 2))
|
initial_linewrap = max((1, linewrap - len(date_str) - 2))
|
||||||
body_linewrap = linewrap - 2
|
body_linewrap = linewrap - 2
|
||||||
card = [
|
card = [
|
||||||
|
|
|
@ -107,6 +107,16 @@ Feature: Multiple journals
|
||||||
When we run "jrnl --cf empty_file.yaml"
|
When we run "jrnl --cf empty_file.yaml"
|
||||||
Then the error output should contain "Unable to parse config file"
|
Then the error output should contain "Unable to parse config file"
|
||||||
|
|
||||||
|
Scenario: Use a config file with linewrap set to 'auto'
|
||||||
|
Given we use the config "linewrap_auto.yaml"
|
||||||
|
When we run "jrnl -1"
|
||||||
|
Then the output should contain "Life is good."
|
||||||
|
|
||||||
|
Scenario: Use a config file with linewrap set to 'auto' and use format 'fancy'
|
||||||
|
Given we use the config "linewrap_auto.yaml"
|
||||||
|
When we run "jrnl -1 --format fancy"
|
||||||
|
Then the output should contain "Life is good."
|
||||||
|
|
||||||
Scenario: Show a warning message when the config file contains duplicate keys at the same level
|
Scenario: Show a warning message when the config file contains duplicate keys at the same level
|
||||||
Given the config "duplicate_keys.yaml" exists
|
Given the config "duplicate_keys.yaml" exists
|
||||||
And we use the config "duplicate_keys.yaml"
|
And we use the config "duplicate_keys.yaml"
|
||||||
|
|
17
tests/data/configs/linewrap_auto.yaml
Normal file
17
tests/data/configs/linewrap_auto.yaml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
default_hour: 9
|
||||||
|
default_minute: 0
|
||||||
|
editor: ""
|
||||||
|
encrypt: false
|
||||||
|
highlight: true
|
||||||
|
journals:
|
||||||
|
default: features/journals/simple.journal
|
||||||
|
linewrap: auto
|
||||||
|
tagsymbols: "@"
|
||||||
|
template: false
|
||||||
|
timeformat: "%Y-%m-%d %H:%M"
|
||||||
|
indent_character: "|"
|
||||||
|
colors:
|
||||||
|
date: none
|
||||||
|
title: none
|
||||||
|
body: none
|
||||||
|
tags: none
|
Loading…
Add table
Reference in a new issue