mirror of
https://github.com/ericonr/util-linux.git
synced 2024-04-21 09:12:35 -05:00
It is desirable for bash-completion to complete block devices via symlinks (e.g. under /dev/disk) and with non-canonical locations (e.g. ./sda if $PWD is /dev, and /chroot/dev/sda). Unfortunately, this is a non-trivial task due to how bash-completion works. It is necessary to un-escape the last partial argument, search, then escape the results, ideally handling tilde and variable expansion/completion. See [_get_comp_words_by_ref] and [_filedir] in the bash-completion project for details. Given the development costs of a complete and correct implementation, the annoyance/frustration which would result from an incomplete/buggy implementation, and the trade-offs between under- and over-completion, this commit adds fallback to bash default completion if the argument does not match any canonical device names. This correctly completes in the cases mentioned above, although it incorrectly completes on non-block-device files as well. [_filedir]: https://github.com/scop/bash-completion/blob/2.9/bash_completion#L552 [_get_comp_words_by_ref]: https://github.com/scop/bash-completion/blob/2.9/bash_completion#L365 Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
26 lines
563 B
Plaintext
26 lines
563 B
Plaintext
_delpart_module()
|
|
{
|
|
local cur prev OPTS
|
|
COMPREPLY=()
|
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
|
case $prev in
|
|
'-h'|'--help'|'-V'|'--version')
|
|
return 0
|
|
;;
|
|
esac
|
|
case $COMP_CWORD in
|
|
1)
|
|
OPTS="--help --version $(lsblk -pnro name)"
|
|
compopt -o bashdefault -o default
|
|
COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
|
|
;;
|
|
2)
|
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
|
COMPREPLY=( $(compgen -W "$(cat /sys/block/${prev##*/}/*/partition 2>/dev/null)" -- $cur) )
|
|
;;
|
|
esac
|
|
return 0
|
|
}
|
|
complete -F _delpart_module delpart
|