]>
Commit | Line | Data |
---|---|---|
f8457290 | 1 | # shellcheck shell=bash |
36f186a9 | 2 | # systemd-id128(1) completion -*- shell-script -*- |
db9ecf05 | 3 | # SPDX-License-Identifier: LGPL-2.1-or-later |
58a6c57b YW |
4 | # |
5 | # This file is part of systemd. | |
6 | # | |
7 | # systemd is free software; you can redistribute it and/or modify it | |
8 | # under the terms of the GNU Lesser General Public License as published by | |
9 | # the Free Software Foundation; either version 2.1 of the License, or | |
10 | # (at your option) any later version. | |
11 | # | |
12 | # systemd is distributed in the hope that it will be useful, but | |
13 | # WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | # General Public License for more details. | |
16 | # | |
17 | # You should have received a copy of the GNU Lesser General Public License | |
85fce6f4 | 18 | # along with systemd; If not, see <https://www.gnu.org/licenses/>. |
58a6c57b YW |
19 | |
20 | __contains_word () { | |
843cfcb1 ZJS |
21 | local w word=$1; shift |
22 | for w in "$@"; do | |
23 | [[ $w = "$word" ]] && return | |
24 | done | |
25 | return 1 | |
58a6c57b YW |
26 | } |
27 | ||
28 | _systemd_id128() { | |
843cfcb1 | 29 | local i verb comps |
f34173a0 | 30 | local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword |
843cfcb1 | 31 | local -A OPTS=( |
45a3c025 FS |
32 | [STANDALONE]='-h --help --version -p --pretty --value -u --uuid --no-legend --no-pager -j' |
33 | [ARG]='-a --app-specific --json' | |
843cfcb1 | 34 | ) |
58a6c57b | 35 | |
843cfcb1 ZJS |
36 | local -A VERBS=( |
37 | [STANDALONE]='new machine-id boot-id invocation-id help' | |
45a3c025 | 38 | [ARG]='show' |
843cfcb1 | 39 | ) |
58a6c57b | 40 | |
843cfcb1 | 41 | _init_completion || return |
58a6c57b | 42 | |
843cfcb1 ZJS |
43 | if __contains_word "$prev" ${OPTS[ARG]}; then |
44 | case $prev in | |
45 | --app-specific|-a) | |
46 | comps="" | |
47 | ;; | |
45a3c025 FS |
48 | --json) |
49 | comps="short pretty off" | |
50 | ;; | |
843cfcb1 ZJS |
51 | esac |
52 | COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) | |
53 | return 0 | |
54 | fi | |
58a6c57b | 55 | |
843cfcb1 ZJS |
56 | if [[ "$cur" = -* ]]; then |
57 | COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) | |
58 | return 0 | |
59 | fi | |
58a6c57b | 60 | |
843cfcb1 ZJS |
61 | for ((i=0; i < COMP_CWORD; i++)); do |
62 | if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && | |
63 | ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then | |
64 | verb=${COMP_WORDS[i]} | |
65 | break | |
58a6c57b | 66 | fi |
843cfcb1 | 67 | done |
58a6c57b | 68 | |
36ec0268 | 69 | if [[ -z ${verb-} ]]; then |
843cfcb1 ZJS |
70 | comps=${VERBS[*]} |
71 | elif __contains_word "$verb" ${VERBS[STANDALONE]}; then | |
72 | comps='' | |
45a3c025 FS |
73 | elif __contains_word "$verb" ${VERBS[ARG]}; then |
74 | case $verb in | |
75 | show) | |
76 | comps="$(IFS='\n ' systemd-id128 show --no-legend)" | |
77 | ;; | |
78 | esac | |
843cfcb1 ZJS |
79 | fi |
80 | ||
81 | COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) | |
82 | return 0 | |
58a6c57b YW |
83 | } |
84 | ||
85 | complete -F _systemd_id128 systemd-id128 |