diff --git a/jrnl/cli.py b/jrnl/cli.py index 72eff470..6d88685a 100644 --- a/jrnl/cli.py +++ b/jrnl/cli.py @@ -13,7 +13,7 @@ from . import Journal from . import util from . import install from . import plugins -from .util import ERROR_COLOR, RESET_COLOR +from .util import ERROR_COLOR, RESET_COLOR, UserAbort import jrnl import argparse import sys @@ -143,7 +143,12 @@ def run(manual_args=None): print(util.py2encode(version_str)) sys.exit(0) - config = install.load_or_install_jrnl() + try: + config = install.load_or_install_jrnl() + except UserAbort as err: + util.prompt("\n{}".format(err)) + sys.exit(1) + if args.ls: util.prnt(list_journals(config)) sys.exit(0) diff --git a/jrnl/install.py b/jrnl/install.py index 417497aa..77247508 100644 --- a/jrnl/install.py +++ b/jrnl/install.py @@ -12,6 +12,7 @@ from . import upgrade from . import __version__ from .Journal import PlainJournal from .EncryptedJournal import EncryptedJournal +from .util import UserAbort import yaml import logging import sys @@ -101,7 +102,11 @@ def load_or_install_jrnl(): return config else: log.debug('Configuration file not found, installing jrnl...') - return install() + try: + config = install() + except KeyboardInterrupt: + raise UserAbort("Installation aborted") + return config def install(): diff --git a/jrnl/upgrade.py b/jrnl/upgrade.py index 4e315f82..f2b80af3 100644 --- a/jrnl/upgrade.py +++ b/jrnl/upgrade.py @@ -4,7 +4,7 @@ from . import __version__ from . import Journal from . import util from .EncryptedJournal import EncryptedJournal -import sys +from .util import UserAbort import os import codecs @@ -77,10 +77,12 @@ older versions of jrnl anymore. for journal, path in other_journals.items(): util.prompt(" {:{pad}} -> {}".format(journal, path, pad=longest_journal_name)) - cont = util.yesno("\nContinue upgrading jrnl?", default=False) - if not cont: - util.prompt("jrnl NOT upgraded, exiting.") - sys.exit(1) + try: + cont = util.yesno("\nContinue upgrading jrnl?", default=False) + if not cont: + raise KeyboardInterrupt + except KeyboardInterrupt: + raise UserAbort("jrnl NOT upgraded, exiting.") for journal_name, path in encrypted_journals.items(): util.prompt("\nUpgrading encrypted '{}' journal stored in {}...".format(journal_name, path)) diff --git a/jrnl/util.py b/jrnl/util.py index 7f6688d8..bc36ba9b 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -47,6 +47,10 @@ SENTENCE_SPLITTER = re.compile(r""" )""", re.UNICODE | re.VERBOSE) +class UserAbort(Exception): + pass + + def getpass(prompt="Password: "): if not TEST: return gp.getpass(bytes(prompt))