Files
Zbigniew Jędrzejewski-Szmek 7eb1f731ea shell-completion,man: beef up chassis completions and description
Parameters to hostnamectl command are not optional and should not be marked
as such in the man page.

(cherry picked from commit 1ed7749564)
(cherry picked from commit ba838f7f9b)
2014-07-19 17:24:15 -04:00

89 lines
3.1 KiB
Plaintext

#compdef localectl
_localectl_set-locale() {
local -a _locales locale_fields
locale_fields=(LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME \
LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER \
LC_NAME LC_ADDRESS LC_TELEPHONE \
LC_MEASUREMENT LC_IDENTIFICATION)
# LC_ALL is omitted on purpose
local expl suf
_locales=( ${(f)"$(_call_program locales "$service" list-locales)"} )
compset -P1 '*='
if [[ -prefix 1 *\= ]]; then
local conf=${PREFIX%%\=*}
_wanted locales expl "locales configs" \
_combination localeconfs confs=$conf locales "$@" -
else
compadd -S '=' $locale_fields
fi
}
_localectl_set-keymap() {
local -a _keymaps
if (( CURRENT <= 3 )); then
_keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} )
_describe keymaps _keymaps
else
_message "no more options"
fi
}
_localectl_set-x11-keymap() {
if (( $+commands[pkg-config] )); then
local -a _file _layout _model _variant _options
local _xorg_lst
_xorg_lst=${"$($commands[pkg-config] xkeyboard-config --variable=xkb_base)"}
_file=( ${(ps:\n\!:)"$(<$_xorg_lst/rules/xorg.lst)"} )
_layout=( ${${${(M)${(f)_file[1]}:# *}# }%% *} )
_model=( ${${${(M)${(f)_file[2]}:# *}# }%% *} )
_variant=( ${${${(M)${(f)_file[3]}:# *}# }%% *} )
_options=( ${${${(M)${(f)_file[4]}:# *}# }%% *} )
#_layout=( ${(f)"$( echo $_file[1] | awk '/^ / {print $1}' )"} )
#_model=( ${(f)"$(echo $_file[2] | awk '/^ / {print $1}')"} )
#_variant=( ${(f)"$(echo $_file[3] | awk '/^ / {print $1}')"} )
#_options=( ${(f)"$(echo ${_file[4]//:/\\:} | awk '/^ / {print $1}')"} )
case $CURRENT in
2) _describe layouts _layout ;;
3) _describe models _model;;
4) _describe variants _variant;;
5) _describe options _options;;
*) _message "no more options"
esac
fi
}
_localectl_command() {
local -a _localectl_cmds
_localectl_cmds=(
'status:Show current locale settings'
'set-locale:Set system locale'
'list-locales:Show known locales'
'set-keymap:Set virtual console keyboard mapping'
'list-keymaps:Show known virtual console keyboard mappings'
'set-x11-keymap:Set X11 keyboard mapping'
)
if (( CURRENT == 1 )); then
_describe -t commands 'localectl command' _localectl_cmds
else
local curcontext="$curcontext"
cmd="${${_localectl_cmds[(r)$words[1]:*]%%:*}}"
if (( $+functions[_localectl_$cmd] )); then
_localectl_$cmd
else
_message "unknown localectl command: $words[1]"
fi
fi
}
_arguments \
{-h,--help}'[Show this help]' \
'--version[Show package version]' \
"--no-convert[Don't convert keyboard mappings]" \
'--no-pager[Do not pipe output into a pager]' \
'--no-ask-password[Do not prompt for password]' \
{-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
'*::localectl commands:_localectl_command'