X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=shell-completion%2Fbash%2Fkernel-install;h=7cd2494cf7ed751142af03925cbdaa71e688c5ab;hp=1832d4aba4aa95047ad80953456b6363e70c2fea;hb=a4892054059c483a695e4250713b5ed8948a1c2f;hpb=819da59577758a7a328020546127091e45bc59e7;ds=sidebyside diff --git a/shell-completion/bash/kernel-install b/shell-completion/bash/kernel-install index 1832d4aba..7cd2494cf 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 . -__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