[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
04/04: bash completion: Complete subcommands and their options.
From: |
Ludovic Courtès |
Subject: |
04/04: bash completion: Complete subcommands and their options. |
Date: |
Wed, 7 Sep 2016 15:35:56 +0000 (UTC) |
civodul pushed a commit to branch master
in repository guix.
commit f07f7d86145c10539709ca43cb0c201b6f935005
Author: Ludovic Courtès <address@hidden>
Date: Wed Sep 7 17:33:48 2016 +0200
bash completion: Complete subcommands and their options.
* etc/completion/bash/guix (_guix_complete_subcommand): New function.
(_guix_complete_option): Allow completion of subcommand options.
(_guix_complete): Use '_guix_complete_subcommand' for "system" and
"import".
---
etc/completion/bash/guix | 28 +++++++++++++++++++++-------
1 file changed, 21 insertions(+), 7 deletions(-)
diff --git a/etc/completion/bash/guix b/etc/completion/bash/guix
index b38c319..c92f891 100644
--- a/etc/completion/bash/guix
+++ b/etc/completion/bash/guix
@@ -20,6 +20,15 @@
declare _guix_available_packages
+_guix_complete_subcommand ()
+{
+ local command="${COMP_WORDS[1]}"
+ local subcommands="$(${COMP_WORDS[0]} $command --help 2> /dev/null \
+ | grep '^ [a-z]' \
+ | sed -e's/^ \+\([a-z-]\+\).*$/\1/g')"
+ COMPREPLY=($(compgen -W "$subcommands" -- "${COMP_WORDS[${#COMP_WORDS[*]}
- 1]}"))
+}
+
_guix_complete_available_package ()
{
local prefix="$1"
@@ -45,11 +54,16 @@ _guix_complete_installed_package ()
_guix_complete_option ()
{
- local options="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} --help 2> /dev/null \
+ 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 \
| grep '^ \+-' \
| sed
-e's/^.*--\([a-zA-Z0-9_-]\+\)\(=\?\).*/--\1\2/g')"
compopt -o nospace
- COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[$word_count - 1]}"))
+ COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[${#COMP_WORDS[*]} -
1]}"))
}
_guix_is_command ()
@@ -140,13 +154,13 @@ _guix_complete ()
fi
elif _guix_is_command "system"
then
- _guix_complete_file # TODO: complete sub-commands
- elif _guix_is_command "hash"
+ _guix_complete_subcommand
+ elif _guix_is_command "import"
then
- _guix_complete_file
- elif _guix_is_command "import" # TODO: complete sub-commands
+ _guix_complete_subcommand
+ elif _guix_is_command "hash"
then
- _guix_complete_file
+ _guix_complete_file
else
_guix_complete_available_package "$word_at_point"
fi