~ruther/guix-local

f07f7d86145c10539709ca43cb0c201b6f935005 — Ludovic Courtès 9 years ago e9006d0
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".
1 files changed, 21 insertions(+), 7 deletions(-)

M etc/completion/bash/guix
M etc/completion/bash/guix => etc/completion/bash/guix +21 -7
@@ 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