mirror of
https://github.com/systemd/systemd
synced 2024-09-06 16:56:43 +00:00
![Zbigniew Jędrzejewski-Szmek](/assets/img/avatar_default.png)
Since there's no file extension, emacs and other editors do not know that this is supposed to be in shell syntax.
99 lines
3.7 KiB
Bash
99 lines
3.7 KiB
Bash
#compdef localectl -*- shell-script -*-
|
|
# SPDX-License-Identifier: LGPL-2.1+
|
|
|
|
(( $+functions[_localectl_set-locale] )) ||
|
|
_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
|
|
}
|
|
|
|
(( $+functions[_localectl_set-keymap] )) ||
|
|
_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
|
|
}
|
|
|
|
(( $+functions[_localectl_set-x11-keymap] )) ||
|
|
_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[2]}:# *}# }%% *} )
|
|
_model=( ${${${(M)${(f)_file[1]}:# *}# }%% *} )
|
|
_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
|
|
}
|
|
|
|
(( $+functions[_localectl_commands] )) ||
|
|
_localectl_commands() {
|
|
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'
|
|
'list-x11-keymap-models:Show known X11 keyboard mapping models'
|
|
'list-x11-keymap-layouts:Show known X11 keyboard mapping layouts'
|
|
'list-x11-keymap-variants:Show known X11 keyboard mapping variants'
|
|
'list-x11-keymap-options:Show known X11 keyboard mapping options'
|
|
)
|
|
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' \
|
|
{-M+,--machine=}'[Operate on local container]:machine' \
|
|
'*::localectl commands:_localectl_commands'
|