mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-19 11:31:26 +01:00
18443: new completion for dcop
This commit is contained in:
parent
61be35604c
commit
51d874e2c3
3 changed files with 124 additions and 1 deletions
|
@ -1,3 +1,7 @@
|
|||
2003-04-15 Oliver Kiddle <opk@zsh.org>
|
||||
|
||||
* 18443: Completion/X/Command/_dcop: new completion for dcop
|
||||
|
||||
2003-04-14 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* unposted: Doc/Zsh/compsys.yo: large-scale but unfinished
|
||||
|
|
|
@ -2,5 +2,5 @@ DISTFILES_SRC='
|
|||
.distfiles
|
||||
_gv _netscape _xauth _xfig _mozilla _xterm _xwit
|
||||
_nedit _vnc _x_utils _xdvi _xmodmap _xset _xv
|
||||
_xloadimage
|
||||
_dcop _xloadimage
|
||||
'
|
||||
|
|
119
Completion/X/Command/_dcop
Normal file
119
Completion/X/Command/_dcop
Normal file
|
@ -0,0 +1,119 @@
|
|||
#compdef dcop dcopstart dcopfind dcopref dcopclient dcopobject
|
||||
|
||||
local curcontext="$curcontext" desc vals arg base max=0 ret=1
|
||||
local app obj fun
|
||||
local -a state line expl
|
||||
|
||||
case $service in
|
||||
dcop(client|object))
|
||||
state=( dcopref )
|
||||
max=2
|
||||
;;
|
||||
dcopref) max=3 ;;
|
||||
dcopstart)
|
||||
if (( CURRENT > 2 )); then
|
||||
_urls && return
|
||||
fi
|
||||
;;
|
||||
dcopfind)
|
||||
local cmd=$words[1]
|
||||
_arguments -C \
|
||||
'-a[print application id instead of DCOPRef]' \
|
||||
'-l[if object not found, run dcopstart and retry]' \
|
||||
'*::args:->args' && ret=0
|
||||
unset state
|
||||
words=( $cmd $words )
|
||||
(( CURRENT++ ))
|
||||
;;
|
||||
esac
|
||||
|
||||
if (( max && CURRENT > max )); then
|
||||
_message 'no more arguments'
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -z "$state" ]]; then
|
||||
state=(application object function)
|
||||
[[ $words[2] = DCOPRef* && CURRENT -ne 2 ]]
|
||||
base=$?
|
||||
state=( ${state[CURRENT-base]:-arg} )
|
||||
|
||||
[[ $state[1] = application && $service = dcop(|find) ]] && state+=( dcopref )
|
||||
fi
|
||||
|
||||
while (( $#state )); do
|
||||
unset app obj fun
|
||||
|
||||
if [[ $words[2] = (#b)DCOPRef*\(([^,]#)((#e)|,)([^\\\)]#)(*) ]]; then
|
||||
if [[ -n $match[2] ]]; then
|
||||
app=$match[1]
|
||||
if [[ -n $match[4] ]]; then
|
||||
obj=$match[3]
|
||||
[[ -n $words[3] && CURRENT -gt 3 ]] && fun=$words[3]
|
||||
fi
|
||||
fi
|
||||
else
|
||||
case $CURRENT in
|
||||
<5->) fun="$words[4]" ;&
|
||||
4) obj="$words[3]" ;&
|
||||
3) app="$words[2]" ;;
|
||||
esac
|
||||
fi
|
||||
vals=( ${(f)"$(_call_program dcop-$state[1]s ${(M)words[1]##*/}dcop $app $obj 2>/dev/null)"} )
|
||||
|
||||
case "$state[1]" in
|
||||
application|object)
|
||||
[[ -n ${(M)vals:#*\(default\)} ]] && vals+=( default )
|
||||
_wanted dcop-$state[1]s expl $state[1] compadd "$@" - ${vals% \(default\)} && ret=0
|
||||
;;
|
||||
|
||||
function)
|
||||
[[ $service = dcopfind ]] && vals=( ${(M)vals:#bool *} )
|
||||
_wanted dcop-$state[1]s expl $state[1] compadd "$@" - ${${vals#* }%\(*} && ret=0
|
||||
;;
|
||||
|
||||
arg)
|
||||
arg=${${${(M)vals:#*$fun\(*}#*\(}%\)*},
|
||||
arg=${${(s.,.)arg}[CURRENT-base-3]}
|
||||
if [[ -n $arg ]]; then
|
||||
if [[ $arg = (Q(|C)String|*int )* || $arg != *\ * ]]; then
|
||||
# don't mention the argument's type
|
||||
desc="${arg##* }"
|
||||
else
|
||||
desc="${arg##* } (${arg% *})"
|
||||
fi
|
||||
case $arg in
|
||||
bool*) _wanted argument expl "$desc" compadd true false && return ;;
|
||||
(#i)*(file|path|dir)*) _wanted argument expl "$desc" _files && return ;;
|
||||
(#i)*url*) _wanted argument expl "$desc" _urls && return ;;
|
||||
*) _message -e argument "$desc" ;;
|
||||
esac
|
||||
else
|
||||
_message 'no more arguments'
|
||||
fi
|
||||
;;
|
||||
|
||||
dcopref)
|
||||
if ! compset -P '*\('; then
|
||||
_wanted dcoprefs expl 'dcop ref' compadd -S '' 'DCOPRef(' && ret=0
|
||||
elif compset -P '*,'; then
|
||||
if compset -S '(|\\)\)*'; then
|
||||
set -- -S '' "$@"
|
||||
else
|
||||
set -- "$@" -S"${${QIPREFIX:+)}:-\)}$compstate[quote] "
|
||||
fi
|
||||
state+=( object )
|
||||
else
|
||||
if compset -S ',*'; then
|
||||
set -- "$@" -S ''
|
||||
else
|
||||
set -- "$@" -S ,
|
||||
fi
|
||||
state+=( application )
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift state
|
||||
done
|
||||
|
||||
return ret
|
Loading…
Reference in a new issue