Skip to content

Commit

Permalink
shell-completion/*/rmmod: add bash/fish/zsh completion
Browse files Browse the repository at this point in the history
v2:
 - use e(x)clusive answers for fish, tweak force string

Signed-off-by: Emil Velikov <[email protected]>
  • Loading branch information
evelikov committed Sep 18, 2024
1 parent 46c7160 commit 25f8198
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
1 change: 1 addition & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ foreach tuple : _completiondirs

_completions = [
'lsmod',
'rmmod',
]

if completiondir != 'no'
Expand Down
34 changes: 34 additions & 0 deletions shell-completion/bash/rmmod
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# rmmod(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# Copyright 2024 Emil Velikov
#
# 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
16 changes: 16 additions & 0 deletions shell-completion/fish/rmmod.fish
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# rmmod(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# Copyright 2024 Emil Velikov

# 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' ')"
21 changes: 21 additions & 0 deletions shell-completion/zsh/_rmmod
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#compdef rmmod

# rmmod(8) completion -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# Copyright 2024 Emil Velikov

(( $+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'

0 comments on commit 25f8198

Please sign in to comment.