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:
Jonathan van der Steege 2022-07-30 21:22:04 +02:00 committed by GitHub
parent 252c63f4dd
commit 80bfff384e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 66 additions and 7 deletions

View file

@ -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.

View file

@ -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,

View file

@ -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 = [

View file

@ -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"

View 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