diff --git a/meson.build b/meson.build index f45fb9bc..c85d9846 100644 --- a/meson.build +++ b/meson.build @@ -216,6 +216,7 @@ foreach tuple : _completiondirs _completions = [ 'lsmod', + 'rmmod', ] if completiondir != 'no' diff --git a/shell-completion/bash/rmmod b/shell-completion/bash/rmmod new file mode 100644 index 00000000..daaa2221 --- /dev/null +++ b/shell-completion/bash/rmmod @@ -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 diff --git a/shell-completion/fish/rmmod.fish b/shell-completion/fish/rmmod.fish new file mode 100644 index 00000000..e0b163d7 --- /dev/null +++ b/shell-completion/fish/rmmod.fish @@ -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' ')" diff --git a/shell-completion/zsh/_rmmod b/shell-completion/zsh/_rmmod new file mode 100644 index 00000000..a25432b2 --- /dev/null +++ b/shell-completion/zsh/_rmmod @@ -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'