localectl revision b4f91f2ba354c16dc23111cc231010c975c717a2
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# localectl(1) completion -*- shell-script -*-
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann#
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# This file is part of systemd.
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann#
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# Copyright 2010 Ran Benita
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann#
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# systemd is free software; you can redistribute it and/or modify it
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# under the terms of the GNU Lesser General Public License as published by
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# the Free Software Foundation; either version 2.1 of the License, or
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# (at your option) any later version.
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann#
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# systemd is distributed in the hope that it will be useful, but
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# WITHOUT ANY WARRANTY; without even the implied warranty of
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# General Public License for more details.
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann#
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# You should have received a copy of the GNU Lesser General Public License
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# along with systemd; If not, see <http://www.gnu.org/licenses/>.
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann__contains_word () {
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann local w word=$1; shift
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann for w in "$@"; do
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann [[ $w = "$word" ]] && return
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann done
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann}
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann__locale_fields=( LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME \
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER \
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann LC_NAME LC_ADDRESS LC_TELEPHONE \
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann LC_MEASUREMENT LC_IDENTIFICATION )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann# LC_ALL is omitted on purpose
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann_localectl() {
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann local i verb comps locale_vals
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann local OPTS='-h --help --version --no-convert --no-pager --no-ask-password
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann -H --host --machine'
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann if __contains_word "$prev" $OPTS; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann case $prev in
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann --host|-H)
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann comps=''
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann ;;
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann esac
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann return 0
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann fi
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
5476ad087c0f2d45ab0dab1bab9ef3e9d70418bcMarcel Holtmann if [[ $cur = -* ]]; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann return 0
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann fi
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann local -A VERBS=(
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann [STANDALONE]='status list-locales list-keymaps'
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann [LOCALES]='set-locale'
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann [KEYMAPS]='set-keymap'
5476ad087c0f2d45ab0dab1bab9ef3e9d70418bcMarcel Holtmann [X11]='set-x11-keymap'
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann for ((i=0; i < COMP_CWORD; i++)); do
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]}; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann verb=${COMP_WORDS[i]}
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann break
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann fi
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann done
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann if [[ -z $verb ]]; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann comps=${VERBS[*]}
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann elif __contains_word "$verb" ${VERBS[LOCALES]}; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann if [[ $cur = *=* ]]; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann mapfile -t locale_vals < <(command localectl list-locales 2>/dev/null)
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann COMPREPLY=( $(compgen -W '${locale_vals[*]}' -- "${cur#=}") )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann elif [[ $prev = "=" ]]; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann mapfile -t locale_vals < <(command localectl list-locales 2>/dev/null)
5476ad087c0f2d45ab0dab1bab9ef3e9d70418bcMarcel Holtmann COMPREPLY=( $(compgen -W '${locale_vals[*]}' -- "$cur") )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann else
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann compopt -o nospace
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann COMPREPLY=( $(compgen -W '${__locale_fields[*]}' -S= -- "$cur") )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann fi
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann return 0
5476ad087c0f2d45ab0dab1bab9ef3e9d70418bcMarcel Holtmann elif __contains_word "$verb" ${VERBS[KEYMAPS]}; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann comps=$(command localectl list-keymaps)
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[X11]}; then
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann comps=''
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann fi
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann return 0
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann}
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmanncomplete -F _localectl localectl
94f5bbc626f2a4102debd9b17c964170a887cb49Marcel Holtmann