1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-10-02 17:01:19 +02:00
zsh/Completion/X/_xmodmap
1999-09-23 13:09:12 +00:00

94 lines
2.1 KiB
Plaintext

#compdef xmodmap
setopt localoptions extendedglob
local state line ret=1
typeset -A options
_x_arguments \
-{help,grammar,verbose,quiet} \
'-n[only show what would be done]' \
'*-e[specify expression]:expression:->expr' \
'-pm[print modifier map]' \
'-pk[print keymap table]' \
'-pke[print keymap table as expressions]' \
'-pp[print pointer map]' \
':X mapping file:_files' && ret=0
if [[ -n "$state" ]]; then
local expl expr="${PREFIX##[ ]#}" what suf
if compset -P '[^ ]##[ ]##'; then
case "$expr" in
keycode*)
if compset -P '*=[ ]#'; then
compset -P '*[ ]'
what=ksyms
elif [[ "$expr" = *[\ \ ]##[^\ \ ]##[\ \ ] ]]; then
IPREFIX="${IPREFIX}${PREFIX}"
PREFIX=''
compadd -S ' ' '=' && ret=0
else
_message 'key code or `any'"'"
fi
;;
keysym*)
if compset -P '*=[ ]#'; then
compset -P '*[ ]'
what=ksyms
elif [[ "$expr" = *[\ \ ]##[^\ \ ]##[\ \ ] ]]; then
IPREFIX="${IPREFIX}${PREFIX}"
PREFIX=''
compadd -S ' ' '=' && ret=0
else
what=ksym-eq
fi
;;
clear*)
what=mods
;;
(add|remove)*)
if compset -P '*[ ]##'; then
what=ksyms
else
what=mods-eq
fi
;;
pointer*)
if compset -P '*=[ ]#'; then
compset -P '*[ ]'
_description expl 'button code'
compadd "$expl[@]" -qS ' ' 1 2 3 4 5 default
return
else
IPREFIX="${IPREFIX}${PREFIX}"
PREFIX=''
compadd -S ' ' '=' && ret=0
fi
;;
esac
if [[ "$what" = *eq* ]]; then
suf=(-S ' = ')
elif [[ "$what" = *ksyms* ]]; then
if [[ -n "$compstate[quote]" ]]; then
suf=(-S "$compstate[quote] " -r "$compstate[quote] ")
else
suf=(-qS ' ')
fi
else
suf=()
fi
[[ "$what" = *mods* ]] && _x_modifier "$suf[@]" && ret=0
[[ "$what" = *ksym* ]] && _x_keysym "$suf[@]" && ret=0
else
_description expl command
compadd "$expl[@]" -S ' ' keycode keysym clear add remove && ret=0
compadd "$expl[@]" -S ' = ' pointer && ret=0
fi
fi
return ret