diff --git a/CHANGELOG.md b/CHANGELOG.md index a44755dc..1d1fb676 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ Changelog ========= +### 1.3.2 + +* [Improved] Everything that is not direct output of jrnl will be written stderr to improve integration + ### 1.3.0 * [New] Export to multiple files diff --git a/jrnl/Journal.py b/jrnl/Journal.py index 9deb2a38..827c9551 100644 --- a/jrnl/Journal.py +++ b/jrnl/Journal.py @@ -3,8 +3,8 @@ try: from . import Entry except (SystemError, ValueError): import Entry -try: from .util import get_local_timezone -except (SystemError, ValueError): from util import get_local_timezone +try: from .util import get_local_timezone, prompt +except (SystemError, ValueError): from util import get_local_timezone, prompt import codecs import os try: import parsedatetime.parsedatetime_consts as pdt @@ -76,7 +76,7 @@ class Journal(object): try: plain = crypto.decrypt(cipher[16:]) except ValueError: - print("ERROR: Your journal file seems to be corrupted. You do have a backup, don't you?") + prompt("ERROR: Your journal file seems to be corrupted. You do have a backup, don't you?") sys.exit(-1) if plain[-1] != " ": # Journals are always padded return None @@ -118,9 +118,9 @@ class Journal(object): attempts += 1 self.config['password'] = None # This password doesn't work. if attempts < 3: - print("Wrong password, try again.") + prompt("Wrong password, try again.") else: - print("Extremely wrong password.") + prompt("Extremely wrong password.") sys.exit(-1) journal = decrypted else: diff --git a/jrnl/__init__.py b/jrnl/__init__.py index 7ca6b98e..d17a3b01 100644 --- a/jrnl/__init__.py +++ b/jrnl/__init__.py @@ -7,7 +7,7 @@ jrnl is a simple journal application for your command line. """ __title__ = 'jrnl' -__version__ = '1.3.1' +__version__ = '1.3.2' __author__ = 'Manuel Ebert' __license__ = 'MIT License' __copyright__ = 'Copyright 2013 Manuel Ebert' diff --git a/jrnl/jrnl.py b/jrnl/jrnl.py index 37a310b7..ef78840b 100755 --- a/jrnl/jrnl.py +++ b/jrnl/jrnl.py @@ -29,6 +29,7 @@ xdg_config = os.environ.get('XDG_CONFIG_HOME') CONFIG_PATH = os.path.join(xdg_config, "jrnl") if xdg_config else os.path.expanduser('~/.jrnl_config') PYCRYPTO = install.module_exists("Crypto") + def parse_args(args=None): parser = argparse.ArgumentParser() composing = parser.add_argument_group('Composing', 'Will make an entry out of whatever follows as arguments') @@ -77,7 +78,7 @@ def get_text_from_editor(config): raw = f.read() os.remove(tmpfile) else: - print('[Nothing saved to file]') + util.prompt('[Nothing saved to file]') raw = '' return raw @@ -89,19 +90,19 @@ def encrypt(journal, filename=None): journal.make_key(prompt="Enter new password:") journal.config['encrypt'] = True journal.write(filename) - print("Journal encrypted to {0}.".format(filename or journal.config['journal'])) + util.prompt("Journal encrypted to {0}.".format(filename or journal.config['journal'])) def decrypt(journal, filename=None): """ Decrypts into new file. If filename is not set, we encrypt the journal file itself. """ journal.config['encrypt'] = False journal.config['password'] = "" journal.write(filename) - print("Journal decrypted to {0}.".format(filename or journal.config['journal'])) + util.prompt("Journal decrypted to {0}.".format(filename or journal.config['journal'])) def touch_journal(filename): """If filename does not exist, touch the file""" if not os.path.exists(filename): - print("[Journal created at {0}]".format(filename)) + util.prompt("[Journal created at {0}]".format(filename)) open(filename, 'a').close() def update_config(config, new_config, scope): @@ -122,15 +123,15 @@ def cli(manual_args=None): try: config = json.load(f) except ValueError as e: - print("[There seems to be something wrong with your jrnl config at {}: {}]".format(CONFIG_PATH, e.message)) - print("[Entry was NOT added to your journal]") + util.prompt("[There seems to be something wrong with your jrnl config at {}: {}]".format(CONFIG_PATH, e.message)) + util.prompt("[Entry was NOT added to your journal]") sys.exit(-1) install.update_config(config, config_path=CONFIG_PATH) original_config = config.copy() # check if the configuration is supported by available modules if config['encrypt'] and not PYCRYPTO: - print("According to your jrnl_conf, your journal is encrypted, however PyCrypto was not found. To open your journal, install the PyCrypto package from http://www.pycrypto.org.") + util.prompt("According to your jrnl_conf, your journal is encrypted, however PyCrypto was not found. To open your journal, install the PyCrypto package from http://www.pycrypto.org.") sys.exit(-1) args = parse_args(manual_args) @@ -173,7 +174,7 @@ def cli(manual_args=None): raw = raw.decode(sys.getfilesystemencoding()) entry = journal.new_entry(raw, args.date) entry.starred = args.star - print("[Entry added to {0} journal]".format(journal_name)) + util.prompt("[Entry added to {0} journal]".format(journal_name)) journal.write() # Reading mode @@ -193,7 +194,7 @@ def cli(manual_args=None): print(exporters.export(journal, args.export, args.output)) elif (args.encrypt is not False or args.decrypt is not False) and not PYCRYPTO: - print("PyCrypto not found. To encrypt or decrypt your journal, install the PyCrypto package from http://www.pycrypto.org.") + util.prompt("PyCrypto not found. To encrypt or decrypt your journal, install the PyCrypto package from http://www.pycrypto.org.") elif args.encrypt is not False: encrypt(journal, filename=args.encrypt) @@ -211,7 +212,7 @@ def cli(manual_args=None): elif args.delete_last: last_entry = journal.entries.pop() - print("[Deleted Entry:]") + util.prompt("[Deleted Entry:]") print(last_entry) journal.write() diff --git a/jrnl/util.py b/jrnl/util.py index 4279bab0..ac432fbf 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -11,9 +11,14 @@ def u(s): return s if PY3 else unicode(s, "unicode_escape") STDIN = sys.stdin +STDERR = sys.stderr STDOUT = sys.stdout __cached_tz = None +def prompt(msg): + """Prints a message to the std err stream defined in util.""" + print(msg, file=STDERR) + def py23_input(msg): STDOUT.write(msg) return STDIN.readline().strip()