chiark / gitweb /
test: fix some tests when running inside a container
[elogind.git] / shell-completion / bash / localectl
index 84e2a6b09e83174e151d1fa7b2349baad327db24..c9e22af2aa162a9b9aed99fe190075b8c35c99ad 100644 (file)
@@ -24,8 +24,14 @@ __contains_word () {
         done
 }
 
+__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
+
 _localectl() {
-        local i verb comps
+        local i verb comps locale_vals
         local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
         local OPTS='-h --help --version --no-convert --no-pager --no-ask-password
                     -H --host'
@@ -62,7 +68,17 @@ _localectl() {
         if [[ -z $verb ]]; then
                 comps=${VERBS[*]}
         elif __contains_word "$verb" ${VERBS[LOCALES]}; then
-                comps=$(command localectl list-locales)
+                if [[ $cur = *=* ]]; then
+                        mapfile -t locale_vals < <(command localectl list-locales 2>/dev/null)
+                        COMPREPLY=( $(compgen -W '${locale_vals[*]}' -- "${cur#=}") )
+                elif [[ $prev = "=" ]]; then
+                        mapfile -t locale_vals < <(command localectl list-locales 2>/dev/null)
+                        COMPREPLY=( $(compgen -W '${locale_vals[*]}' -- "$cur") )
+                else
+                        compopt -o nospace
+                        COMPREPLY=( $(compgen -W '${__locale_fields[*]}' -S= -- "$cur") )
+                fi
+                return 0
         elif __contains_word "$verb" ${VERBS[KEYMAPS]}; then
                 comps=$(command localectl list-keymaps)
         elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[X11]}; then