summaryrefslogtreecommitdiff
path: root/Completion/X/Command
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/X/Command')
-rw-r--r--Completion/X/Command/.distfiles4
-rw-r--r--Completion/X/Command/_mozilla2
-rw-r--r--Completion/X/Command/_setxkbmap99
3 files changed, 103 insertions, 2 deletions
diff --git a/Completion/X/Command/.distfiles b/Completion/X/Command/.distfiles
index f45994bc3..8ce27f599 100644
--- a/Completion/X/Command/.distfiles
+++ b/Completion/X/Command/.distfiles
@@ -4,7 +4,9 @@ _acroread _dcop
_gnome-gv _gqview _gv _kfmclient
_mozilla _mplayer _nautilus
_nedit _netscape
-_qiv _urxvt _vnc
+_qiv
+_setxkbmap
+_urxvt _vnc
_x_utils _xauth _xdvi _xfig _xloadimage
_xmodmap _xpdf _xscreensaver _xset _xterm
_xv _xwit
diff --git a/Completion/X/Command/_mozilla b/Completion/X/Command/_mozilla
index eef72d2aa..7b2689757 100644
--- a/Completion/X/Command/_mozilla
+++ b/Completion/X/Command/_mozilla
@@ -27,7 +27,6 @@ else
else
mozopts=(
"($popts)-installer[start with 4.x migration window]"
- "($popts)-CreateProfile:profile"
"($popts)-ProfileWizard[start with profile wizard]"
"($popts)-SelectProfile[start with profile selection dialog]"
'-splash[enable splash screen]'
@@ -42,6 +41,7 @@ else
_x_arguments -C $mozopts \
'-height[height of startup window]:height' \
'(-)'{-h,-help}'[show usage message]' \
+ "($popts)-CreateProfile:profile" \
'-width[width of startup window]:width' \
'(-)'{-v,-version}'[show the version number and build date]' \
"($popts)-P[start with profile]:profile:->profile" \
diff --git a/Completion/X/Command/_setxkbmap b/Completion/X/Command/_setxkbmap
new file mode 100644
index 000000000..85609b554
--- /dev/null
+++ b/Completion/X/Command/_setxkbmap
@@ -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 "$@"