loginctl revision d611dadcc74db10ba533ee6859308f5fc505aee1
3802a3d3d7af51ddff31943d5514382f01265770Lennart Poettering# loginctl(1) completion -*- shell-script -*-
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering#
12b42c76672a66c2d4ea7212c14f8f1b5a62b78dTom Gundersen# This file is part of systemd.
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering#
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering# Copyright 2010 Ran Benita
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek#
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering# systemd is free software; you can redistribute it and/or modify it
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek# under the terms of the GNU Lesser General Public License as published by
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering# the Free Software Foundation; either version 2.1 of the License, or
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek# (at your option) any later version.
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek#
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek# systemd is distributed in the hope that it will be useful, but
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek# WITHOUT ANY WARRANTY; without even the implied warranty of
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek# General Public License for more details.
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek#
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek# You should have received a copy of the GNU Lesser General Public License
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek# along with systemd; If not, see <http://www.gnu.org/licenses/>.
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek__contains_word () {
b975b0d514321f169b3c4599a8ea92e13741b4e4Zbigniew Jędrzejewski-Szmek local word=$1; shift
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering for w in $*; do [[ $w = $word ]] && return 0; done
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering return 1
48f69d8fb4d0cf34d578352572c96d86e13caa79Lennart Poettering}
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering__get_all_sessions () { loginctl list-sessions | { while read -r a b; do printf "%s\n" "$a"; done; } ; }
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering__get_all_users () { loginctl list-users | { while read -r a b; do printf "%s\n" "$b"; done; } ; }
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering__get_all_seats () { loginctl list-seats | { while read -r a b; do printf "%s\n" "$a"; done; } ; }
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering_loginctl () {
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering local i verb comps
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering local -A OPTS=(
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering [STANDALONE]='--all -a --help -h --no-pager --privileged -P --version'
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering [ARG]='--host -H --kill-who --property -p --signal -s'
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering if __contains_word "$prev" ${OPTS[ARG]}; then
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering case $prev in
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering --signal|-s)
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=$(compgen -A signal)
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering ;;
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering --kill-who)
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps='all leader'
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering ;;
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann --host|-H)
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=$(compgen -A hostname)
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann ;;
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering --property|-p)
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=''
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering ;;
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering esac
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering return 0
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering fi
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering if [[ "$cur" = -* ]]; then
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering return 0
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering fi
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering local -A VERBS=(
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann [SESSIONS]='session-status show-session activate lock-session unlock-session terminate-session kill-session'
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann [USERS]='user-status show-user enable-linger disable-linger terminate-user kill-user'
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann [SEATS]='seat-status show-seat terminate-seat'
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann [STANDALONE]='list-sessions list-users list-seats flush-devices'
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann [ATTACH]='attach'
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann )
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering for ((i=0; $i <= $COMP_CWORD; i++)); do
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
53d6837510478e1275b294654663635466cbafc7Tom Gundersen verb=${COMP_WORDS[i]}
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering break
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering fi
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann done
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann if [[ -z $verb ]]; then
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann comps="${VERBS[*]}"
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann elif __contains_word "$verb" ${VERBS[SESSIONS]}; then
dfb815c36df6e5f2089672b1d986d38b44c7ad17David Herrmann comps=$( __get_all_sessions )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering elif __contains_word "$verb" ${VERBS[USERS]}; then
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=$( __get_all_users )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering elif __contains_word "$verb" ${VERBS[SEATS]}; then
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=$( __get_all_seats )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=''
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering elif __contains_word "$verb" ${VERBS[ATTACH]}; then
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering if [[ $prev = $verb ]]; then
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=$( __get_all_seats )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering else
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering comps=$(compgen -A file -- "$cur" )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering compopt -o filenames
b8bde11658366290521e3d03316378b482600323Jan Engelhardt fi
b8bde11658366290521e3d03316378b482600323Jan Engelhardt fi
b8bde11658366290521e3d03316378b482600323Jan Engelhardt
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering return 0
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering}
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering
b8bde11658366290521e3d03316378b482600323Jan Engelhardtcomplete -F _loginctl loginctl
a6278b88305b237b02eabff0d870b57fe851822dLennart Poettering