mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-07 09:21:18 +02:00
91 lines
3 KiB
Text
91 lines
3 KiB
Text
#compdef fc history r
|
|
|
|
local curcontext="$curcontext" state state_descr line expl ret=1
|
|
local num cmd sep
|
|
local -a events
|
|
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 1 '*='; then
|
|
_message -e replacements 'replacement'
|
|
elif [[ -prefix [0-9] ]]; then
|
|
print -v events -f "%-${#HISTNO}.${#HISTNO}s $sep %s" "${(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
|