From 9ce4eebcb615f5ce7df9bd23e3ff20e2eab38d82 Mon Sep 17 00:00:00 2001 From: Elena ``of Valhalla'' Grandi Date: Mon, 2 Jan 2017 17:00:29 +0100 Subject: Try to use multiple editors to edit files --- lesana/command.py | 64 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/lesana/command.py b/lesana/command.py index 513a5b2..4937ccf 100644 --- a/lesana/command.py +++ b/lesana/command.py @@ -13,12 +13,54 @@ from . import Collection, Entry def edit_file_in_external_editor(filepath): + # First we try to use $EDITOR + try: + editor = os.environ['EDITOR'] + subprocess.call([editor, filepath]) + except FileNotFoundError as e: + if editor in str(e): + logging.info( + 'Could not open file {} with $EDITOR (currently {})'.format( + filepath, + editor + ) + ) + else: + logging.warning("Could not open file {}".format(filepath)) + return False + else: + return True + # then we try to use sensible-editor (which should be available on + # debian and derivatives) try: subprocess.call(['sensible-editor', filepath]) except FileNotFoundError as e: - logging.warning( - "Could not open new file with editor: {}".format(str(e)) - ) + if 'sensible-editor' in e.strerror: + logging.debug( + "Could not open file {} with editor: sensible-editor".format(filepath) + ) + else: + logging.warning("Could not open file {}".format(filepath)) + return False + else: + return True + # and finally we fallback to vi, because ed is the standard editor, + # but that would be way too cruel, and vi is also in posix + try: + subprocess.call(['vi', filepath]) + except FileNotFoundError as e: + if 'vi' in e.strerror: + logging.warning( + "Could not open file {} with any known editor".format(filepath) + ) + return False + else: + logging.warning("Could not open file {}".format(filepath)) + return False + else: + return True + + class New(gadona.Command): @@ -37,13 +79,7 @@ class New(gadona.Command): collection.itemdir, new_entry.fname ) - try: - subprocess.call(['sensible-editor', filepath]) - except FileNotFoundError as e: - logging.warning( - "Could not open new file with editor: {}".format(str(e)) - ) - else: + if edit_file_in_external_editor(filepath): collection.update_cache([filepath]) print(new_entry.fname) @@ -67,13 +103,7 @@ class Edit(gadona.Command): collection.itemdir, entry.fname ) - try: - subprocess.call(['sensible-editor', filepath]) - except FileNotFoundError as e: - logging.warning( - "Could not open new file with editor: {}".format(str(e)) - ) - else: + if edit_file_in_external_editor(filepath): collection.update_cache([filepath]) -- cgit v1.2.3