From e9006d06a04e60db1ca78283b6c7e951d5a477fd Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 7 Sep 2016 16:22:25 +0200 Subject: bash completion: Redirect 'guix' stderr to /dev/null. This avoids spurious messages when pressing TAB. * etc/completion/bash/guix (_guix_complete_available_package) (_guix_complete_installed_package, _guix_complete_option) (_guix_complete): Redirect stderr to /dev/null when running 'guix'. --- etc/completion/bash/guix | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'etc/completion/bash') diff --git a/etc/completion/bash/guix b/etc/completion/bash/guix index 807a0b2e1f..b38c319cce 100644 --- a/etc/completion/bash/guix +++ b/etc/completion/bash/guix @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2015 Ludovic Courtès +# Copyright © 2015, 2016 Ludovic Courtès # # This file is part of GNU Guix. # @@ -27,7 +27,8 @@ _guix_complete_available_package () then # Cache the complete list because it rarely changes and makes # completion much faster. - _guix_available_packages="$(${COMP_WORDS[0]} package -A | cut -f1)" + _guix_available_packages="$(${COMP_WORDS[0]} package -A 2> /dev/null \ + | cut -f1)" fi COMPREPLY=($(compgen -W "$_guix_available_packages" -- "$prefix")) } @@ -37,15 +38,16 @@ _guix_complete_installed_package () # Here we do not cache the list of installed packages because that # may change over time and the list is relatively small anyway. local prefix="$1" - local packages="$(${COMP_WORDS[0]} package -I "^$prefix" | cut -f1)" + local packages="$(${COMP_WORDS[0]} package -I "^$prefix" 2> /dev/null \ + | cut -f1)" COMPREPLY=($(compgen -W "$packages" -- "$prefix")) } _guix_complete_option () { - local options="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} --help \ + local options="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} --help 2> /dev/null \ | grep '^ \+-' \ - | sed -e's/^.*--\([a-zA-Z0-9_-]\+\)\(=\?\).*/--\1\2/g' )" + | sed -e's/^.*--\([a-zA-Z0-9_-]\+\)\(=\?\).*/--\1\2/g')" compopt -o nospace COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[$word_count - 1]}")) } @@ -119,7 +121,8 @@ _guix_complete () if [ -z "$_guix_subcommands" ] then # Cache the list of subcommands to speed things up. - _guix_subcommands="$(guix --help | grep '^ ' | cut -c 2-)" + _guix_subcommands="$(guix --help 2> /dev/null \ + | grep '^ ' | cut -c 2-)" fi COMPREPLY=($(compgen -W "$_guix_subcommands" -- "$word_at_point")) ;; -- cgit v1.2.3 From f07f7d86145c10539709ca43cb0c201b6f935005 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Wed, 7 Sep 2016 17:33:48 +0200 Subject: 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(-) (limited to 'etc/completion/bash') diff --git a/etc/completion/bash/guix b/etc/completion/bash/guix index b38c319cce..c92f8915c9 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 -- cgit v1.2.3