diff options
author | Tobias Geerinckx-Rice <me@tobias.gr> | 2021-06-14 10:58:57 +0200 |
---|---|---|
committer | Tobias Geerinckx-Rice <me@tobias.gr> | 2021-06-16 12:13:39 +0200 |
commit | dc3ba8c83602d69294e21d1b0c066f0d89890b56 (patch) | |
tree | d3399139d400fd04b49317f3982ffebcf7154bb8 | |
parent | 80a17aae7991c6df061a98bb71734485f4ca17e2 (diff) | |
download | guix-dc3ba8c83602d69294e21d1b0c066f0d89890b56.tar.gz |
bash completion: Complete options for the right command.
* etc/completion/bash/guix (_guix_complete_option): Receive two arguments and complete the second based on the first, instead of blindly completing the very last word based on the very first (sub)command. (_guix_complete): Adjust both calls.
-rw-r--r-- | etc/completion/bash/guix | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/etc/completion/bash/guix b/etc/completion/bash/guix index 2b0ec56c92..f7d1eeb220 100644 --- a/etc/completion/bash/guix +++ b/etc/completion/bash/guix @@ -69,16 +69,17 @@ _guix_complete_installed_package () _guix_complete_option () { - local subcommand - case "${COMP_WORDS[2]}" in - -*) subcommand="";; - [a-z]*) subcommand="${COMP_WORDS[2]}";; - esac - local options="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} $subcommand --help 2> /dev/null \ + local command="${COMP_WORDS[$1]}" + local subcommand="${COMP_WORDS[$(($1 + 1))]}" + if _guix_is_option "$subcommand" + then + subcommand="" + fi + local options="$(${COMP_WORDS[0]} $command $subcommand --help 2> /dev/null \ | grep '^ \+-' \ | sed -e's/^.*--\([a-zA-Z0-9_-]\+\)\(=\?\).*/--\1\2/g')" compopt -o nospace - COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[${#COMP_WORDS[*]} - 1]}")) + COMPREPLY=($(compgen -W "$options" -- "$2")) } _guix_is_option () @@ -289,7 +290,7 @@ _guix_complete () then _guix_complete_file else - _guix_complete_command + _guix_complete_option "$command_index" "$word_at_point" fi elif [[ "$command" = "container" ]] then @@ -319,7 +320,7 @@ _guix_complete () if [[ -z "$COMPREPLY" && COMP_CWORD -gt command_index ]] && _guix_is_option "$word_at_point" then - _guix_complete_option + _guix_complete_option "$command_index" "$word_at_point" fi } |