mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 16:48:31 +02:00
Deleting the last entry
This commit is contained in:
parent
490ba01a2e
commit
abe586d84e
3 changed files with 57 additions and 24 deletions
|
@ -54,6 +54,10 @@ class Journal(object):
|
|||
self.entries = self.parse(journal_txt)
|
||||
self.sort()
|
||||
|
||||
def __len__(self):
|
||||
"""Returns the number of entries"""
|
||||
return len(self.entries)
|
||||
|
||||
def _colorize(self, string):
|
||||
if colorama:
|
||||
return colorama.Fore.CYAN + string + colorama.Fore.RESET
|
||||
|
@ -184,7 +188,7 @@ class Journal(object):
|
|||
def write(self, filename=None):
|
||||
"""Dumps the journal into the config file, overwriting it"""
|
||||
filename = filename or self.config['journal']
|
||||
journal = "\n".join([e.__unicode__() for e in self.entries])
|
||||
journal = u"\n".join([e.__unicode__() for e in self.entries])
|
||||
if self.config['encrypt']:
|
||||
journal = self._encrypt(journal)
|
||||
with open(filename, 'wb') as journal_file:
|
||||
|
|
56
jrnl/cli.py
56
jrnl/cli.py
|
@ -20,8 +20,6 @@ except (SystemError, ValueError):
|
|||
import install
|
||||
import jrnl
|
||||
import os
|
||||
import tempfile
|
||||
import subprocess
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
|
@ -51,7 +49,8 @@ def parse_args(args=None):
|
|||
exporting.add_argument('-o', metavar='OUTPUT', dest='output', help='The output of the file can be provided when using with --export', default=False, const=None)
|
||||
exporting.add_argument('--encrypt', metavar='FILENAME', dest='encrypt', help='Encrypts your existing journal with a new password', nargs='?', default=False, const=None)
|
||||
exporting.add_argument('--decrypt', metavar='FILENAME', dest='decrypt', help='Decrypts your journal and stores it in plain text', nargs='?', default=False, const=None)
|
||||
exporting.add_argument('--delete-last', dest='delete_last', help='Deletes the last entry from your journal file.', action="store_true")
|
||||
exporting.add_argument('--delete', dest='delete', help='Deletes the selected entries your journal file.', action="store_true")
|
||||
exporting.add_argument('--edit', dest='edit', help='Opens your editor to edit the selected entries.', action="store_true")
|
||||
|
||||
return parser.parse_args(args)
|
||||
|
||||
|
@ -59,7 +58,7 @@ def guess_mode(args, config):
|
|||
"""Guesses the mode (compose, read or export) from the given arguments"""
|
||||
compose = True
|
||||
export = False
|
||||
if args.decrypt is not False or args.encrypt is not False or args.export is not False or any((args.short, args.tags, args.delete_last)):
|
||||
if args.decrypt is not False or args.encrypt is not False or args.export is not False or any((args.short, args.tags, args.delete, args.edit)):
|
||||
compose = False
|
||||
export = True
|
||||
elif any((args.start_date, args.end_date, args.limit, args.strict, args.starred)):
|
||||
|
@ -71,20 +70,6 @@ def guess_mode(args, config):
|
|||
|
||||
return compose, export
|
||||
|
||||
def get_text_from_editor(config):
|
||||
tmpfile = os.path.join(tempfile.gettempdir(), "jrnl")
|
||||
subprocess.call(config['editor'].split() + [tmpfile])
|
||||
if os.path.exists(tmpfile):
|
||||
with open(tmpfile) as f:
|
||||
raw = f.read()
|
||||
os.remove(tmpfile)
|
||||
else:
|
||||
util.prompt('[Nothing saved to file]')
|
||||
raw = ''
|
||||
|
||||
return raw
|
||||
|
||||
|
||||
def encrypt(journal, filename=None):
|
||||
""" Encrypt into new file. If filename is not set, we encrypt the journal file itself. """
|
||||
password = util.getpass("Enter new password: ")
|
||||
|
@ -176,7 +161,7 @@ def run(manual_args=None):
|
|||
# Piping data into jrnl
|
||||
raw = util.py23_read()
|
||||
elif config['editor']:
|
||||
raw = get_text_from_editor(config)
|
||||
raw = util.get_text_from_editor(config)
|
||||
else:
|
||||
raw = util.py23_read("[Compose Entry; " + _exit_multiline_code + " to finish writing]\n")
|
||||
if raw:
|
||||
|
@ -193,6 +178,7 @@ def run(manual_args=None):
|
|||
util.prompt("[Entry added to {0} journal]".format(journal_name))
|
||||
journal.write()
|
||||
else:
|
||||
old_entries = journal.entries
|
||||
journal.filter(tags=args.text,
|
||||
start_date=args.start_date, end_date=args.end_date,
|
||||
strict=args.strict,
|
||||
|
@ -231,10 +217,34 @@ def run(manual_args=None):
|
|||
update_config(original_config, {"encrypt": False}, journal_name, force_local=True)
|
||||
install.save_config(original_config, config_path=CONFIG_PATH)
|
||||
|
||||
elif args.delete_last:
|
||||
last_entry = journal.entries.pop()
|
||||
util.prompt("[Deleted Entry:]")
|
||||
print(last_entry.pprint())
|
||||
elif args.delete:
|
||||
other_entries = [e for e in old_entries if e not in journal.entries]
|
||||
util.prompt("Following entries will be deleted:")
|
||||
for e in journal.entries[:10]:
|
||||
util.prompt(" "+e.pprint(short=True))
|
||||
if len(journal) > 10:
|
||||
q = "...and {0} more. Do you really want to delete these entries?".format(len(journal) - 10)
|
||||
else:
|
||||
q = "Do you really want to delete these entries?"
|
||||
ok = util.yesno(q, default=False)
|
||||
if ok:
|
||||
util.prompt("[Deleted {0} entries]".format(len(journal)))
|
||||
journal.entries = other_entries
|
||||
journal.write()
|
||||
|
||||
elif args.edit:
|
||||
other_entries = [e for e in old_entries if e not in journal.entries]
|
||||
# Edit
|
||||
old_num_entries = len(journal)
|
||||
template = u"\n".join([e.__unicode__() for e in journal.entries])
|
||||
edited = util.get_text_from_editor(config, template)
|
||||
journal.entries = journal.parse(edited)
|
||||
num_deleted = old_num_entries - len(journal)
|
||||
if num_deleted:
|
||||
util.prompt("[Deleted {0} entries]".format(num_deleted))
|
||||
else:
|
||||
util.prompt("[Edited {0} entries]".format(len(journal)))
|
||||
journal.entries += other_entries
|
||||
journal.write()
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
19
jrnl/util.py
19
jrnl/util.py
|
@ -9,6 +9,9 @@ import pytz
|
|||
try: import simplejson as json
|
||||
except ImportError: import json
|
||||
import re
|
||||
import tempfile
|
||||
import subprocess
|
||||
import codecs
|
||||
|
||||
PY3 = sys.version_info[0] == 3
|
||||
PY2 = sys.version_info[0] == 2
|
||||
|
@ -121,3 +124,19 @@ def load_and_fix_json(json_path):
|
|||
prompt("[Entry was NOT added to your journal]")
|
||||
sys.exit(1)
|
||||
|
||||
def get_text_from_editor(config, template=""):
|
||||
tmpfile = os.path.join(tempfile.gettempdir(), "jrnl")
|
||||
if template:
|
||||
with codecs.open(tmpfile, 'w', "utf-8") as f:
|
||||
f.write(template)
|
||||
subprocess.call(config['editor'].split() + [tmpfile])
|
||||
if os.path.exists(tmpfile):
|
||||
with codecs.open(tmpfile, "r", "utf-8") as f:
|
||||
raw = f.read()
|
||||
os.remove(tmpfile)
|
||||
else:
|
||||
prompt('[Nothing saved to file]')
|
||||
raw = ''
|
||||
|
||||
return raw
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue