home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / UNIX / Shells / zsh-3.0.5-MIHS / src / Functions / zed < prev   
Encoding:
Text File  |  1997-06-03  |  1.4 KB  |  63 lines

  1. # zed():  Peter Stephenson <pws@s-a.amtp.liv.ac.uk>
  2. # No other shell could do this.
  3. # Edit small files with the command line editor.
  4. # Use ^X^W to save, ^C to abort.
  5. # Option -f: edit shell functions.  (Also if called as fned.)
  6. #
  7. # Completion: use
  8. # compctl -f -x 'w[1,-f]' -F -- zed
  9.  
  10. local var fun cleanup
  11. # We do not want timeout while we are editing a file
  12. integer TMOUT=0
  13.  
  14. [[ $1 = -f || $0 = fned ]] && fun=1
  15. [[ $1 = -(|-|f) ]] && shift
  16.  
  17. [[ -z "$1" ]] && echo 'Usage: "zed filename" or "zed -f function"' && return 1
  18.  
  19. # catch interrupts
  20. cleanup="$(bindkey -L "^M"; bindkey -L -M emacs "^X^W"; bindkey -aL "ZZ"
  21.     echo "trap - INT EXIT"; trap)"
  22. trap "return 130" INT
  23. trap "$cleanup" EXIT
  24.  
  25. # don't mangle !'s
  26. setopt localoptions nobanghist
  27.  
  28. bindkey "^M" self-insert-unmeta
  29. # Depending on your stty's, you may be able to use ^J as accept-line, else:
  30. bindkey -M emacs "^X^W" accept-line
  31. bindkey -a "ZZ" accept-line
  32.  
  33. if ((fun)) then
  34.   var="$(functions $1)"
  35.   # If function is undefined but autoloadable, load it
  36.   if [[ $var = undefined* ]] then
  37.     local dir
  38.     for dir in $fpath; do
  39.       if [[ -f $dir/$1 ]] then
  40.     var="$1() {
  41. $(<$dir/$1)
  42. }"
  43.     break
  44.       fi
  45.     done
  46.   elif [[ -z $var ]] then
  47.     var="$1() {
  48. }"
  49.   fi
  50.   vared var && eval function "$var"
  51. else
  52.   [[ -f $1 ]] && var="$(<$1)"
  53.   while vared var
  54.   do
  55.     (print -r -- "$var" >| $1) && break
  56.     echo -n -e '\a'
  57.   done
  58. fi
  59.  
  60. return 0
  61.  
  62. # End of zed
  63.