mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 08:38:32 +02:00
Add --delete for interactive removal of entries (#698)
* Add --delete for interactive removal of entries * Add inquirer dependency for fancy prompting * Fix some minor style issues * Fix #434 * Use PyInquirer instead of inquirer for Windows compatibility * Add WIP (broken) test * Change deletion interface to be more basic * Update environment.py Co-authored-by: Jonathan Wren <jonathan@nowandwren.com>
This commit is contained in:
parent
d4a0895163
commit
f4fca3e5a4
5 changed files with 54 additions and 1 deletions
|
@ -93,3 +93,17 @@ Feature: Basic reading and writing to a journal
|
|||
2013-06-10 15:40 Life is good.
|
||||
"""
|
||||
And we should get no error
|
||||
|
||||
# The input for this test is <SPACE><ENTER>y
|
||||
Scenario: --delete flag allows deletion of single entry
|
||||
Given we use the config "deletion.yaml"
|
||||
When we run "jrnl --delete"
|
||||
And we type " "
|
||||
And we type
|
||||
"""
|
||||
|
||||
y
|
||||
"""
|
||||
When we run "jrnl -on 2019-10-29 -s"
|
||||
Then the output should not contain "2019-10-29 11:11 First entry."
|
||||
|
||||
|
|
12
features/data/configs/deletion.yaml
Normal file
12
features/data/configs/deletion.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
default_hour: 9
|
||||
default_minute: 0
|
||||
editor: ""
|
||||
encrypt: false
|
||||
highlight: true
|
||||
journals:
|
||||
default: features/journals/deletion.journal
|
||||
linewrap: 80
|
||||
tagsymbols: "@"
|
||||
template: false
|
||||
timeformat: "%Y-%m-%d %H:%M"
|
||||
indent_character: "|"
|
5
features/data/journals/deletion.journal
Normal file
5
features/data/journals/deletion.journal
Normal file
|
@ -0,0 +1,5 @@
|
|||
[2019-10-29 11:11] First entry.
|
||||
|
||||
[2019-10-29 11:11] Second entry.
|
||||
|
||||
[2019-10-29 11:13] Third entry.
|
|
@ -234,6 +234,17 @@ class Journal:
|
|||
|
||||
self.entries = result
|
||||
|
||||
def prompt_delete_entries(self):
|
||||
"""Prompts for deletion of entries in a journal."""
|
||||
print("Confirm each entry you want to delete [N/y]:")
|
||||
to_delete: List[Entry] = []
|
||||
for entry in self.entries:
|
||||
response = input("jrnl: Delete entry '{}'? ".format(entry.pprint(short=True)))
|
||||
if response == "y":
|
||||
to_delete.append(entry)
|
||||
|
||||
self.entries = [entry for entry in self.entries if entry not in to_delete]
|
||||
|
||||
def new_entry(self, raw, date=None, sort=True):
|
||||
"""Constructs a new entry from some raw text input.
|
||||
If a date is given, it will parse and use this, otherwise scan for a date in the input first."""
|
||||
|
|
13
jrnl/cli.py
13
jrnl/cli.py
|
@ -174,6 +174,13 @@ def parse_args(args=None):
|
|||
action="store_true",
|
||||
)
|
||||
|
||||
exporting.add_argument(
|
||||
"--delete",
|
||||
dest="delete",
|
||||
action="store_true",
|
||||
help="Opens an interactive interface for deleting entries.",
|
||||
)
|
||||
|
||||
# Handle '-123' as a shortcut for '-n 123'
|
||||
num = re.compile(r"^-(\d+)$")
|
||||
if args is None:
|
||||
|
@ -194,7 +201,7 @@ def guess_mode(args, config):
|
|||
args.decrypt is not False
|
||||
or args.encrypt is not False
|
||||
or args.export is not False
|
||||
or any((args.short, args.tags, args.edit))
|
||||
or any((args.short, args.tags, args.edit, args.delete))
|
||||
):
|
||||
compose = False
|
||||
export = True
|
||||
|
@ -456,3 +463,7 @@ def run(manual_args=None):
|
|||
journal.entries += other_entries
|
||||
journal.sort()
|
||||
journal.write()
|
||||
|
||||
elif args.delete:
|
||||
journal.prompt_delete_entries()
|
||||
journal.write()
|
||||
|
|
Loading…
Add table
Reference in a new issue