guix-commits
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]