aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/functions/funced.fish
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-10-17 11:49:26 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-10-17 11:50:09 -0700
commit15e095233b078587005795b3d288c37cfad68127 (patch)
tree7aafa4a35b4dcd30672c44d1a7a23d9aac973223 /share/functions/funced.fish
parenta64c372a2845ab566f437625f790091e09190e90 (diff)
Allow funced to retry on error
Fixes #1371
Diffstat (limited to 'share/functions/funced.fish')
-rw-r--r--share/functions/funced.fish28
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