diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2014-10-17 11:49:26 -0700 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2014-10-17 11:50:09 -0700 |
commit | 15e095233b078587005795b3d288c37cfad68127 (patch) | |
tree | 7aafa4a35b4dcd30672c44d1a7a23d9aac973223 /share/functions/funced.fish | |
parent | a64c372a2845ab566f437625f790091e09190e90 (diff) |
Allow funced to retry on error
Fixes #1371
Diffstat (limited to 'share/functions/funced.fish')
-rw-r--r-- | share/functions/funced.fish | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/share/functions/funced.fish b/share/functions/funced.fish index 074e3c43..88688b13 100644 --- a/share/functions/funced.fish +++ b/share/functions/funced.fish @@ -88,9 +88,31 @@ function funced --description 'Edit function definition' else echo $init > $tmpname end - if eval $editor $tmpname - . $tmpname - end + # Repeatedly edit until it either parses successfully, or the user cancels + # If the editor command itself fails, we assume the user cancelled or the file + # could not be edited, and we do not try again + while true + if not eval $editor $tmpname + _ "Editing failed or was cancelled" + echo + else + if not source $tmpname + # Failed to source the function file. Prompt to try again. + echo # add a line between the parse error and the prompt + set -l repeat + set -l prompt (_ 'Edit the file again\? [Y/n]') + while test -z "$repeat" + read -p "echo $prompt\ " repeat + end + if not contains $repeat n N no NO No nO + continue + end + _ "Cancelled function editing" + echo + end + end + break + end set -l stat $status rm -f $tmpname >/dev/null return $stat |