mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef fc history r
 | |
| 
 | |
| local curcontext="$curcontext" state state_descr line ret=1
 | |
| local events num cmd sep
 | |
| typeset -A opt_args
 | |
| local fc_common fc_hist fc_r
 | |
| 
 | |
| # hide any replacements from _arguments
 | |
| local cur=${(M)#words[1,CURRENT-1]:#*=*}
 | |
| words=( "${(@)words[1,CURRENT-1]:#*=*}" "${(@)words[CURRENT,-1]}" )
 | |
| (( CURRENT -= cur ))
 | |
| 
 | |
| fc_common=(
 | |
|   -s -S
 | |
|   '(-A -R -W -p -P)-I[include internal (new) events only]'
 | |
|   '(-A -R -W -p -P)-L[include local events only]'
 | |
|   '(-A -R -W -p -P)-r[reverse order of the events]'
 | |
|   '(-A -R -W -e -p -P)-n[suppress line numbers]'
 | |
| )
 | |
| 
 | |
| if [[ -n ${words[(r)-[pa](|[ap])]} ]]; then
 | |
|   fc_common+=(
 | |
|     ':history file:_files'
 | |
|     ':history size:'
 | |
|     ':saved history size:'
 | |
|   )
 | |
|   [[ -n ${words[(r)-(|a)p(|a)]} ]] || fc_common+='!-a:option:(-p)'
 | |
| elif [[ -n ${words[(r)-*[ARWI]*]} ]]; then
 | |
|   fc_common+=( ':history file:_files' )
 | |
| else
 | |
|   fc_common=( -C "$fc_common[@]"
 | |
|     '(-)1:first event:->events' '2:last event:->events'
 | |
|   )
 | |
| fi
 | |
| 
 | |
| fc_hist=(
 | |
|   '(-A -R -W -a -p -P 2)-m[treat argument as a pattern]'
 | |
|   '(-A -R -W -e -f -E -i -t -a -p -P)-d[print time-stamps]'
 | |
|   '(-A -R -W -e -d -E -i -t -a -p -P)-f[mm/dd/yyyy format time-stamps]'
 | |
|   '(-A -R -W -e -d -f -i -t -a -p -P)-E[dd.mm.yyyy format time-stamps]'
 | |
|   '(-A -R -W -e -d -f -E -t -a -p -P)-i[yyyy-mm-dd format time-stamps]'
 | |
|   '(-A -R -W -e -d -f -E -i -a -p -P)-t[print time-stamps in specified format]:date format'
 | |
|   '(-A -R -W -e -a -p -P)-D[print elapsed times]'
 | |
| 
 | |
|   '(-A -R -W -I -e -d -f -i -l -m -n -r -D -E -t -P)-a[with -p, automatically pop history on function return]'
 | |
|   '(-A -R -W -I -e -d -f -i -l -m -n -r -D -E -t -P)-p[push current history to stack]'
 | |
|   '(- *)-P[pop history from stack]'
 | |
| )
 | |
| 
 | |
| fc_r='(-A -R -W -e)-l[list resulting commands on stdout]'
 | |
| 
 | |
| case $service in
 | |
|   history)
 | |
|     _arguments "$fc_common[@]" "$fc_hist[@]" && ret=0
 | |
|   ;;
 | |
|   r)
 | |
|     _arguments "$fc_common[@]" "$fc_r" && ret=0
 | |
|   ;;
 | |
|   *)
 | |
|     _arguments "$fc_common[@]" "$fc_hist[@]" "$fc_r" \
 | |
|       '(-A -R -W -a -l -n -d -f -E -i -r -t -D -p -P)-e+[specify editor to invoke]:editor to invoke:_command_names -e' \
 | |
|       '(-a -l -L -m -e -r -n -d -f -t -E -i -R -D -A -W -p -P *)-'{\
 | |
| 'R[read history from file]',\
 | |
| 'A[append history to file]',\
 | |
| 'W[write history to file]'} && ret=0
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| if [[ -n $state ]]; then
 | |
|   zstyle -s ":completion:${curcontext}:" list-separator sep || sep=--
 | |
|   if [[ -z ${line:#*=*} ]] && compset -P '*='; then
 | |
|     _message -e replacements 'replacement'
 | |
|   elif [[ -prefix [0-9] ]]; then
 | |
|     events=( ${(0)"$(printf "%-${#HISTNO}.${#HISTNO}s $sep %s\0" "${(kv)history[@]}")"} )
 | |
|     _wanted -2V events expl "$state_descr" compadd -M "B:0=" -ld events - \
 | |
|         "${events[@]%% *}"
 | |
|   elif [[ -prefix - ]]; then
 | |
|     for num cmd in "${(kv@)history}"; do
 | |
|       (( num=num - HISTNO ))
 | |
|       events+=( "${(r.1+$#HISTNO.)num} $sep $cmd" )
 | |
|     done
 | |
|     _wanted -2V events expl "$state_descr" compadd -ld events - \
 | |
|         "${events[@]%% *}"
 | |
|   else
 | |
|     _wanted events expl "$state_descr" compadd -S '' - \
 | |
|         ${${history%%[=[:IFS:]]*}:#[0-9-]*} || _guard "[0-9]#" event
 | |
|   fi
 | |
| fi && ret=0
 | |
| 
 | |
| return ret
 |