mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-20 05:53:52 +01:00
78 lines
2.3 KiB
Plaintext
78 lines
2.3 KiB
Plaintext
#compdef zle
|
|
|
|
local expl ret=1 st
|
|
local -a opts compwids state
|
|
|
|
compwids=(accept-and-menu-complete
|
|
complete-word
|
|
delete-char-or-list
|
|
expand-or-complete
|
|
expand-or-complete-prefix
|
|
list-choices
|
|
menu-complete
|
|
menu-expand-or-complete
|
|
reverse-menu-complete)
|
|
|
|
opts=(-A -C -D -L -M -N -R -U -a -c -l \* :)
|
|
|
|
_arguments -s -S \
|
|
"($opts)-A[define widget alias]:old widget:->widget :new widget:->widget" \
|
|
"($opts)-C[define completion widget]:new widget name:->comp-widget :completion widget:->builtin-comp-widget :widget shell function:->function" \
|
|
"($opts)-D[delete widget]:*:widget:->widget" \
|
|
"(${opts#-l})-L+[with -l, list as commands]:*:-:->listing" \
|
|
"(${opts#-[La]})-l+[list user-defined widgets]:*:-:->listing" \
|
|
"(${opts#-l})-a+[with -l, list all widgets]:*:-:->listing" \
|
|
"($opts)-M[display message]:message: " \
|
|
"($opts)-N[define new widget]:widget name:->widget-or-function ::widget shell function:->function" \
|
|
"(${opts#-c})-R+[redisplay]:*:-:->redisplay" \
|
|
"(${opts#-R})-c+[with -R, clear listing]:*:-:->redisplay" \
|
|
"($opts)-U[unget to input stack]:string: " \
|
|
'(-)::widget name:->call'
|
|
|
|
[[ $state == listing ]] &&
|
|
_arguments -s -S \
|
|
"-l[list user-defined widgets]" \
|
|
"(-a)-L[list as commands]" \
|
|
"(-L)-a[list all widgets]" \
|
|
'(-)*:widget name:->widget'
|
|
|
|
for st in $state; do
|
|
case $st in
|
|
(call)
|
|
if ((CURRENT > 2)); then
|
|
_arguments \
|
|
'(-N)-n[numeric prefix]:number: ' \
|
|
'(-n)-N[reset numeric prefix]' \
|
|
':widget::' '(-)*:widget arguments: ' && ret=0
|
|
# :widget:: is a placeholder so we needn't shift words
|
|
continue
|
|
fi
|
|
;&
|
|
(widget*)
|
|
_wanted widgets expl widget compadd -k widgets && ret=0
|
|
[[ $st != *function ]] && continue
|
|
;&
|
|
(function)
|
|
_wanted functions expl 'widget shell function' \
|
|
compadd -k functions && ret=0
|
|
;;
|
|
(comp-widget)
|
|
_wanted widgets expl 'completion widget' \
|
|
compadd -k "widgets[(R)(*:|)(.|)(${(j(|))compwids})(|:*)]" && ret=0
|
|
;&
|
|
(builtin-comp-widget)
|
|
_wanted widgets expl 'builtin completion widget' \
|
|
compadd -k "widgets[(I)(.|)(${(j(|))compwids})]" && ret=0
|
|
;;
|
|
(redisplay)
|
|
_arguments -s \
|
|
"-R[redisplay]" \
|
|
"(*)-c[clear listing]" \
|
|
"(-)::status line: " "*:strings to list: " && ret=0
|
|
;;
|
|
(*) ret=$?;;
|
|
esac
|
|
done
|
|
|
|
return ret
|