mirror of
https://github.com/Dasharo/systemd.git
synced 2026-03-06 15:02:31 -08:00
simplify bash completion for kernel-install
This commit is contained in:
@@ -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 comps
|
||||
local MACHINE_ID
|
||||
local cur=${COMP_WORDS[COMP_CWORD]}
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user