shell-completion/*/rmmod: add bash/fish/zsh completion

v2:
 - use e(x)clusive answers for fish, tweak force string

v3:
 - wire the completions to the autotools build

v4:
 - use SPDX style copyright statements

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/138
Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
This commit is contained in:
Emil Velikov 2024-09-18 16:49:08 +01:00 committed by Lucas De Marchi
parent 257034a4e1
commit 76fbadb158
5 changed files with 78 additions and 3 deletions

View File

@ -126,15 +126,18 @@ noarch_pkgconfig_DATA = tools/kmod.pc
bashcompletiondir=@bashcompletiondir@
dist_bashcompletion_DATA = \
shell-completion/bash/kmod \
shell-completion/bash/lsmod
shell-completion/bash/lsmod \
shell-completion/bash/rmmod
fishcompletiondir=@fishcompletiondir@
dist_fishcompletion_DATA = \
shell-completion/fish/lsmod.fish
shell-completion/fish/lsmod.fish \
shell-completion/fish/rmmod.fish
zshcompletiondir=@zshcompletiondir@
dist_zshcompletion_DATA = \
shell-completion/zsh/_lsmod
shell-completion/zsh/_lsmod \
shell-completion/zsh/_rmmod
install-exec-hook:
if BUILD_TOOLS

View File

@ -216,6 +216,7 @@ foreach tuple : _completiondirs
_completions = [
'lsmod',
'rmmod',
]
if completiondir != 'no'

View File

@ -0,0 +1,34 @@
# rmmod(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# SPDX-FileCopyrightText: 2024 Emil Velikov <emil.l.velikov@gmail.com>
#
# Formatted using:
# shfmt --language-dialect bash --indent 4 --func-next-line
_rmmod()
{
# long/short opt pairs
local -A opts=(
['force']='f'
['syslog']='s'
['verbose']='v'
['version']='V'
['help']='h'
)
local cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $cur == --* ]]; then
COMPREPLY=($(compgen -P '--' -W "${!opts[*]}" -- "${cur:2}"))
elif [[ $cur == -* ]]; then
if (( ${#cur} != 2 )); then
COMPREPLY=($(compgen -P '--' -W "${!opts[*]}" -- "${cur:2}"))
fi
COMPREPLY+=($(compgen -P '-' -W "${opts[*]}" -- "${cur:1}"))
else
local -a modules=($(lsmod | cut -f1 -d' '))
COMPREPLY=($(compgen -W "${modules[*]}" -- "${cur}"))
fi
} &&
complete -F _rmmod rmmod

View File

@ -0,0 +1,16 @@
# rmmod(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# SPDX-FileCopyrightText: 2024 Emil Velikov <emil.l.velikov@gmail.com>
# globally disable file completions
complete -c rmmod -f
complete -c rmmod -s f -l force -d "DANGEROUS: forces a module unload and may crash your machine"
complete -c rmmod -s s -l syslog -d 'print to syslog, not stderr'
complete -c rmmod -s v -l verbose -d 'enables more messages'
complete -c rmmod -s V -l version -d 'show version'
complete -c rmmod -s h -l help -d 'show this help'
# provide an exclusive (x) list of required (r) answers (a)
complete -c rmmod -x -ra "(lsmod | cut -f1 -d' ')"

View File

@ -0,0 +1,21 @@
#compdef rmmod
# rmmod(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# SPDX-FileCopyrightText: 2024 Emil Velikov <emil.l.velikov@gmail.com>
(( $+functions[_rmmod_modules] )) || _rmmod_modules()
{
local -a _modules
_modules=(${${(f)"$(_call_program modules lsmod)"}[2,-1]%% *})
_values 'modules' "$_modules[@]"
}
_arguments \
{-f,--force}'[DANGEROUS: forces a module unload and may crash your machine]' \
{-s,--syslog}'[print to syslog, not stderr]' \
{-v,--verbose}'[enables more messages]' \
{-V,--version}'[show version]' \
{-h,--help}'[show this help]' \
'*::modules:_rmmod_modules'