diff options
author | Tanaka Akira <akr@users.sourceforge.net> | 1999-06-08 09:26:01 +0000 |
---|---|---|
committer | Tanaka Akira <akr@users.sourceforge.net> | 1999-06-08 09:26:01 +0000 |
commit | fcd7cd1cfa2ba286f4bf73da7a60116cd3912629 (patch) | |
tree | d2aa5a9369bf3af8841d3abde69f52bd483f5526 /Functions/Misc/zed | |
parent | b39cafaa22ad7efc2ac4b64a5eeac8f49bc80e00 (diff) | |
download | zsh-fcd7cd1cfa2ba286f4bf73da7a60116cd3912629.tar.gz zsh-fcd7cd1cfa2ba286f4bf73da7a60116cd3912629.tar.xz zsh-fcd7cd1cfa2ba286f4bf73da7a60116cd3912629.zip |
Initial revision
Diffstat (limited to 'Functions/Misc/zed')
-rw-r--r-- | Functions/Misc/zed | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/Functions/Misc/zed b/Functions/Misc/zed new file mode 100644 index 000000000..e8e7212ef --- /dev/null +++ b/Functions/Misc/zed @@ -0,0 +1,65 @@ +# +# zed +# +# No other shell could do this. +# Edit small files with the command line editor. +# Use ^X^W to save, ^C to abort. +# Option -f: edit shell functions. (Also if called as fned.) +# +# Completion: use +# compctl -f -x 'w[1,-f]' -F -- zed +# + +local var fun cleanup +# We do not want timeout while we are editing a file +integer TMOUT=0 + +[[ $1 = -f || $0 = fned ]] && fun=1 +[[ $1 = -(|-|f) ]] && shift + +[[ -z "$1" ]] && echo 'Usage: "zed filename" or "zed -f function"' && return 1 + +# catch interrupts +cleanup="$(bindkey -L "^M"; bindkey -L -M emacs "^X^W"; bindkey -aL "ZZ" + echo "trap - INT EXIT"; trap)" +trap "return 130" INT +trap "$cleanup" EXIT + +# don't mangle !'s +setopt localoptions nobanghist + +bindkey "^M" self-insert-unmeta +# Depending on your stty's, you may be able to use ^J as accept-line, else: +bindkey -M emacs "^X^W" accept-line +bindkey -a "ZZ" accept-line + +if ((fun)) then + var="$(functions $1)" + # If function is undefined but autoloadable, load it + if [[ $var = undefined* ]] then + local dir + for dir in $fpath; do + if [[ -f $dir/$1 ]] then + var="$1() { +$(<$dir/$1) +}" + break + fi + done + elif [[ -z $var ]] then + var="$1() { +}" + fi + vared var && eval function "$var" +else + [[ -f $1 ]] && var="$(<$1)" + while vared var + do + (print -r -- "$var" >| $1) && break + echo -n -e '\a' + done +fi + +return 0 + +# End of zed |