mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # 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.)
 | |
| 
 | |
| local var opt zed_file_name
 | |
| # We do not want timeout while we are editing a file
 | |
| integer TMOUT=0 okargs=1 fun bind
 | |
| 
 | |
| while getopts "fb" opt; do
 | |
|   case $opt in
 | |
|     (f)
 | |
|     fun=1
 | |
|     ;;
 | |
| 
 | |
|     (b)
 | |
|     bind=1
 | |
|     ;;
 | |
|   esac
 | |
| done
 | |
| shift $(( OPTIND - 1 ))
 | |
| 
 | |
| [[ $0 = fned ]] && fun=1
 | |
| (( bind )) && okargs=0
 | |
| 
 | |
| if (( $# != okargs )); then
 | |
|     echo 'Usage:
 | |
| zed filename
 | |
| zed -f function
 | |
| zed -b'
 | |
|     return 1
 | |
| fi
 | |
| 
 | |
| local curcontext=zed:::
 | |
| 
 | |
| zstyle -m ":completion:zed:*" insert-tab '*' ||
 | |
|     zstyle ":completion:zed:*" insert-tab yes
 | |
| 
 | |
| if (( bind )) || ! bindkey -M zed >&/dev/null; then
 | |
|   # Make the zed keymap a copy of the current main.
 | |
|   bindkey -N zed main
 | |
|   # Save the current main.  In zle widgets called from
 | |
|   # zed we may want to set this temporally.
 | |
|   bindkey -A main zed-normal-keymap
 | |
| 
 | |
|   # Assign some default keys.
 | |
|   # Depending on your stty's, you may be able to use ^J as accept-line, else:
 | |
| 
 | |
|   # The following isn't useful if we are copying viins, but that's
 | |
|   # a nicety.
 | |
|   bindkey -M zed '^x^w' accept-line
 | |
|   bindkey -M zed '^M' self-insert-unmeta
 | |
| 
 | |
|   # Make zed-set-file-name available.
 | |
|   # Assume it's in fpath; there's no error at this point if it isn't
 | |
|   autoload -U zed-set-file-name
 | |
|   zle -N zed-set-file-name
 | |
| fi
 | |
| if (( bind )) || ! bindkey -M zed-vicmd >&/dev/null; then
 | |
|   bindkey -N zed-vicmd vicmd
 | |
| 
 | |
|   bindkey -M zed-vicmd "ZZ" accept-line
 | |
| fi
 | |
| 
 | |
| (( bind )) && return 0
 | |
| 
 | |
| # don't mangle !'s
 | |
| setopt localoptions nobanghist
 | |
| 
 | |
| if ((fun)) then
 | |
|   var="$(functions $1)"
 | |
|   # If function is undefined but autoloadable, load it
 | |
|   if [[ $var = *\#\ undefined* ]] then
 | |
|       var="$(autoload +X $1; functions $1)"
 | |
|   elif [[ -z $var ]] then
 | |
|     var="$1() {
 | |
| }"
 | |
|   fi
 | |
|   vared -M zed -m zed-vicmd var && eval function "$var"
 | |
| else
 | |
|   zed_file_name=$1
 | |
|   [[ -f $1 ]] && var="$(<$1)"
 | |
|   while vared -M zed -m zed-vicmd var
 | |
|   do
 | |
|     {
 | |
|       print -r -- "$var" >| $zed_file_name
 | |
|     } always {
 | |
|       (( TRY_BLOCK_ERROR = 0 ))
 | |
|     } && break
 | |
|     echo -n -e '\a'
 | |
|   done
 | |
| fi
 | |
| 
 | |
| return 0
 | |
| 
 | |
| # End of zed
 |