mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-17 22:31:12 +01:00
zsh-workers/8013
This commit is contained in:
parent
1244fb81d2
commit
fec17bab42
3 changed files with 120 additions and 0 deletions
20
Completion/X/_x_keysym
Normal file
20
Completion/X/_x_keysym
Normal file
|
@ -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
|
7
Completion/X/_x_modifier
Normal file
7
Completion/X/_x_modifier
Normal file
|
@ -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
|
93
Completion/X/_xmodmap
Normal file
93
Completion/X/_xmodmap
Normal file
|
@ -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
|
Loading…
Reference in a new issue