diff options
-rw-r--r-- | Completion/X/_x_keysym | 20 | ||||
-rw-r--r-- | Completion/X/_x_modifier | 7 | ||||
-rw-r--r-- | Completion/X/_xmodmap | 93 |
3 files changed, 120 insertions, 0 deletions
diff --git a/Completion/X/_x_keysym b/Completion/X/_x_keysym new file mode 100644 index 000000000..6b031014a --- /dev/null +++ b/Completion/X/_x_keysym @@ -0,0 +1,20 @@ +#autoload + +local expl + +if (( ! $+_keysym_cache )); then + local file + + file=( /usr/{include,{{X11R6,openwin},local{,/X11{,R6}}}/include}/X11/keysymdef.h(N) ) + + if (( $#file )); then + _keysym_cache=( "${(@)${(@)${(M@)${(@f)$(< $file[1])}:#\#define[ ]##XK_*}#\#define[ ]##XK_}%%[ ]*}" ) + else + _keysym_cache=( BackSpace Tab Linefeed Clear Return Pause Escape + Delete Left Right Up Down Space Home Begin End + F{1,2,3,4,5,6,7,8,9,10,11,12} ) + fi +fi + +_description expl 'key symbol' +compadd "$@" "$expl[@]" -M 'm:{a-z}={A-Z} r:|-=* r:|=*' - $_keysym_cache diff --git a/Completion/X/_x_modifier b/Completion/X/_x_modifier new file mode 100644 index 000000000..a9276ab71 --- /dev/null +++ b/Completion/X/_x_modifier @@ -0,0 +1,7 @@ +#autoload + +local expl + +_description expl modifier +compadd "$@" "$expl[@]" -M 'm:{a-z}={A-Z}' - \ + Shift Lock Control Mod1 Mod2 Mod3 Mod4 Mod5 diff --git a/Completion/X/_xmodmap b/Completion/X/_xmodmap new file mode 100644 index 000000000..0f6514eb6 --- /dev/null +++ b/Completion/X/_xmodmap @@ -0,0 +1,93 @@ +#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 |