mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-19 11:31:26 +01:00
23057: Merge new completion onto 4.2 branch.
This commit is contained in:
parent
0831000569
commit
fe1416410c
1 changed files with 99 additions and 0 deletions
99
Completion/X/Command/_setxkbmap
Normal file
99
Completion/X/Command/_setxkbmap
Normal file
|
@ -0,0 +1,99 @@
|
|||
# compdef setxkbmap
|
||||
|
||||
# TODO:
|
||||
# model, option, symbols and types suggestions
|
||||
# take -layout and -variant into account
|
||||
|
||||
_setxkbmap() {
|
||||
emulate -L zsh
|
||||
setopt extendedglob
|
||||
|
||||
# xkb files may be in different places depending on system
|
||||
local dir sourcedir
|
||||
for dir in /usr/lib/X11/xkb /usr/share/X11/xkb; do
|
||||
if [ -d $dir ] ; then
|
||||
sourcedir=$dir
|
||||
break
|
||||
fi
|
||||
done
|
||||
[ -d $sourcedir ] || return 1
|
||||
|
||||
local -a arguments
|
||||
|
||||
arguments=(
|
||||
'-compat[compability map]:compability:_setxkbmap_compat'
|
||||
'-config[configuration file]:configuration:_files'
|
||||
'-display[display]:display:_x_display'
|
||||
'-geometry[geometry component]:geometry:_setxkbmap_geometry'
|
||||
'-model[model name]:model:'
|
||||
'-option[xkb option]:option:'
|
||||
'(-)'-print'[print component names]'
|
||||
'-rules[rules file]:rules:_files'
|
||||
'-symbols[symbols components]:symbols:'
|
||||
'(-)'{-help,-h}'[Display help message]'
|
||||
'-synch[force synchronization]'
|
||||
'-types[types components]:types:'
|
||||
'(-verbose -v)'{-verbose,-v}'[Set verbosity level]:verbosity:(0 1 2 3 4 5 6 7 8 9)'
|
||||
'*::keyboard:_setxkbmap_dispatcher'
|
||||
)
|
||||
_arguments $arguments
|
||||
}
|
||||
|
||||
_setxkbmap_dispatcher () {
|
||||
|
||||
case $CURRENT in
|
||||
1)
|
||||
_setxkbmap_layout
|
||||
;;
|
||||
2)
|
||||
_setxkbmap_variant "$words[1]"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_setxkbmap_files () {
|
||||
local dir="$1"
|
||||
local label="$2"
|
||||
|
||||
local -a fullpath shortpath
|
||||
|
||||
fullpath=($sourcedir/$dir/**/*~*README(.))
|
||||
shortpath=(${fullpath#$sourcedir\/$dir\/})
|
||||
|
||||
_wanted layout expl $label compadd -a - shortpath
|
||||
|
||||
}
|
||||
|
||||
(( $+functions[_setxkbmap_compat] )) ||
|
||||
_setxkbmap_compat() {
|
||||
_setxkbmap_files "compat" "compatibility"
|
||||
}
|
||||
|
||||
(( $+functions[_setxkbmap_layout] )) ||
|
||||
_setxkbmap_layout () {
|
||||
_setxkbmap_files "symbols" "layout"
|
||||
}
|
||||
|
||||
(( $+functions[_setxkbmap_geometry] )) ||
|
||||
_setxkbmap_geometry () {
|
||||
_setxkbmap_files "geometry" "geometry"
|
||||
}
|
||||
|
||||
(( $+functions[_setxkbmap_variant] )) ||
|
||||
_setxkbmap_variant () {
|
||||
local file=$sourcedir/symbols/${1}
|
||||
local -a variants lines
|
||||
|
||||
if [ ! -f $file ]; then
|
||||
_message "no such layout: ${1}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
lines=("${(f)$(< ${file})}")
|
||||
variants=(${${${(M)lines:#*xkb_symbols*\"([[:alnum:]])##\"*}##*xkb_symbols([^\"])##\"}%%\"*})
|
||||
|
||||
_wanted variant expl 'variant' compadd -a variants
|
||||
|
||||
}
|
||||
|
||||
_setxkbmap "$@"
|
Loading…
Reference in a new issue