diff options
Diffstat (limited to 'shell-completion/bash')
-rw-r--r-- | shell-completion/bash/kernel-install | 64 |
1 files changed, 23 insertions, 41 deletions
diff --git a/shell-completion/bash/kernel-install b/shell-completion/bash/kernel-install index 1832d4aba4..7cd2494cf7 100644 --- a/shell-completion/bash/kernel-install +++ b/shell-completion/bash/kernel-install @@ -3,6 +3,7 @@ # This file is part of systemd. # # Copyright 2013 Kay Sievers +# Copyright 2013 Harald Hoyer # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by @@ -17,49 +18,30 @@ # You should have received a copy of the GNU Lesser General Public License # along with systemd; If not, see <http://www.gnu.org/licenses/>. -__contains_word () { - local word=$1; shift - for w in $*; do [[ $w = $word ]] && return 0; done - return 1 -} - _kernel_install() { - local i verb comps - local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} - local OPTS='-h --help' - - local -A VERBS=( - [ADD]='add' - [REMOVE]='remove' - ) - - for ((i=0; $i <= $COMP_CWORD; i++)); do - if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} && - ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then - verb=${COMP_WORDS[i]} - break - fi - done - - if [[ -z $verb && $cur = -* ]]; then - COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") ) - return 0 - fi - - if [[ -z $verb ]]; then - comps=${VERBS[*]} - - elif __contains_word "$verb" ${VERBS[ADD]}; then - if [[ $prev = "$verb" ]]; then - comps=$(cd /lib/modules; echo [0-9]*) - elif [[ $prev = [0-9]* ]]; then - comps=$(echo /boot/vmlinuz-$prev*) - fi - - elif __contains_word "$verb" ${VERBS[REMOVE]}; then + local comps + local MACHINE_ID + local cur=${COMP_WORDS[COMP_CWORD]} + + case $COMP_CWORD in + 1) + comps="add remove" + ;; + 2) comps=$(cd /lib/modules; echo [0-9]*) - - fi + if [[ ${COMP_WORDS[1]} == "remove" ]] && [[ -f /etc/machine-id ]]; then + read MACHINE_ID < /etc/machine-id + if [[ $MACHINE_ID ]] && ( [[ -d /boot/$MACHINE_ID ]] || [[ -L /boot/$MACHINE_ID ]] ); then + comps=$(cd "/boot/$MACHINE_ID"; echo [0-9]*) + fi + fi + ;; + 3) + [[ "$cur" ]] || cur=/boot/vmlinuz-${COMP_WORDS[2]} + comps=$(compgen -f -- "$cur") + compopt -o filenames + ;; + esac COMPREPLY=( $(compgen -W '$comps' -- "$cur") ) return 0 |