]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bash-completion: bootctl: support set-default and set-oneshot 11145/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 13 Dec 2018 16:26:52 +0000 (01:26 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 13 Dec 2018 16:26:52 +0000 (01:26 +0900)
shell-completion/bash/bootctl

index 648103fbc0ae6a0dfdf482b8b07f0ebb39a67a6e..64bff4f87999fc9b95c89fc0f735908504cb5ef0 100644 (file)
@@ -24,6 +24,10 @@ __contains_word () {
         done
 }
 
+__get_entry_ids() {
+        bootctl --no-pager list 2>/dev/null | { while read -r a b; do [[ $a == 'id:' ]] && echo " $b"; done }
+}
+
 _bootctl() {
         local i verb comps
         local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
@@ -54,6 +58,7 @@ _bootctl() {
 
         local -A VERBS=(
                 [STANDALONE]='help install list remove status update'
+                [BOOTENTRY]='set-default set-oneshot'
         )
 
         for ((i=0; i < COMP_CWORD; i++)); do
@@ -67,6 +72,21 @@ _bootctl() {
                 comps=${VERBS[*]}
         elif __contains_word "$verb" ${VERBS[STANDALONE]}; then
                 comps=''
+        elif __contains_word "$verb" ${VERBS[BOOTENTRY]}; then
+                name=
+                for ((i++; i < COMP_CWORD; i++)); do
+                        if ! __contains_word "${COMP_WORDS[i]}" ${OPTS[*]} ${VERBS[*]} &&
+                           ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
+                                name=${COMP_WORDS[i]}
+                                break;
+                        fi
+                done
+
+                if [[ -z $name ]]; then
+                        comps=$( __get_entry_ids )
+                else
+                        comps=''
+                fi
         fi
 
         COMPREPLY=( $(compgen -W '$comps' -- "$cur") )