Skip to content

Commit

Permalink
Add linewrap option 'auto' (#1507)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
jonakeys authored Jul 30, 2022
1 parent 252c63f commit 80bfff3
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 7 deletions.
3 changes: 2 additions & 1 deletion docs/reference-config-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ If `true`, tags will be highlighted in cyan.

### linewrap
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
A dictionary that controls the colors used to display journal entries.
Expand Down
22 changes: 18 additions & 4 deletions jrnl/Entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
# License: https://www.gnu.org/licenses/gpl-3.0.html

import datetime
import logging
import os
import re

import ansiwrap

from jrnl.color import colorize
from jrnl.color import highlight_tags_with_background_color
from .color import colorize
from .color import highlight_tags_with_background_color


class Entry:
Expand Down Expand Up @@ -104,6 +106,18 @@ def pprint(self, short=False):
)

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
title = ansiwrap.fill(
date_str
Expand All @@ -114,7 +128,7 @@ def pprint(self, short=False):
self.journal.config["colors"]["title"],
is_title=True,
),
self.journal.config["linewrap"],
columns,
)
body = highlight_tags_with_background_color(
self, self.body.rstrip(" \n"), self.journal.config["colors"]["body"]
Expand All @@ -123,7 +137,7 @@ def pprint(self, short=False):
colorize(
ansiwrap.fill(
line,
self.journal.config["linewrap"],
columns,
initial_indent=indent,
subsequent_indent=indent,
drop_whitespace=True,
Expand Down
19 changes: 18 additions & 1 deletion jrnl/plugins/fancy_exporter.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Copyright (C) 2012-2022 jrnl contributors
# License: https://www.gnu.org/licenses/gpl-3.0.html

import logging
import os
from textwrap import TextWrapper

from jrnl.exception import JrnlException
Expand Down Expand Up @@ -36,7 +38,22 @@ class FancyExporter(TextExporter):
def export_entry(cls, entry):
"""Returns a fancy unicode representation of a single entry."""
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))
body_linewrap = linewrap - 2
card = [
Expand Down
12 changes: 11 additions & 1 deletion tests/bdd/features/config_file.feature
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,16 @@ Feature: Multiple journals
When we run "jrnl --cf empty_file.yaml"
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
Given the config "duplicate_keys.yaml" exists
And we use the config "duplicate_keys.yaml"
Expand All @@ -122,4 +132,4 @@ Feature: Multiple journals
Scenario: Don't show a duplicate keys warning message when using --config-override on an existing value
Given we use the config "multiple.yaml"
When we run "jrnl --config-override highlight false"
Then the output should not contain "There is at least one duplicate key in your configuration file"
Then the output should not contain "There is at least one duplicate key in your configuration file"
17 changes: 17 additions & 0 deletions tests/data/configs/linewrap_auto.yaml
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 80bfff3

Please sign in to comment.