diff options
author | Ludovic Courtès <ludo@gnu.org> | 2015-08-20 19:57:33 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2015-08-20 19:57:33 +0200 |
commit | 4a9999871cc75f2d73d5dc83fbcad88bcaa5b921 (patch) | |
tree | 8452b8e4b440defff70019a9aa7e608ef143737f | |
parent | fa96048f0a97b4265b3c52f30a5accf89e96174b (diff) | |
download | guix-4a9999871cc75f2d73d5dc83fbcad88bcaa5b921.tar guix-4a9999871cc75f2d73d5dc83fbcad88bcaa5b921.tar.gz |
bash completion: Cache the list of subcommands and available packages.
* etc/completion/bash/guix (_guix_complete_available_package): Cache the list
of available packages in '_guix_available_packages' and use it.
(_guix_complete): Cache the list of subcommands in '_guix_subcommands' and
use it.
-rw-r--r-- | etc/completion/bash/guix | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/etc/completion/bash/guix b/etc/completion/bash/guix index e4d9a497b3..807a0b2e1f 100644 --- a/etc/completion/bash/guix +++ b/etc/completion/bash/guix @@ -18,15 +18,24 @@ # Bash completion for Guix commands. +declare _guix_available_packages + _guix_complete_available_package () { local prefix="$1" - local packages="$(${COMP_WORDS[0]} package -A "^$prefix" | cut -f1)" - COMPREPLY=($(compgen -W "$packages" -- "$prefix")) + if [ -z "$_guix_available_packages" ] + then + # Cache the complete list because it rarely changes and makes + # completion much faster. + _guix_available_packages="$(${COMP_WORDS[0]} package -A | cut -f1)" + fi + COMPREPLY=($(compgen -W "$_guix_available_packages" -- "$prefix")) } _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)" COMPREPLY=($(compgen -W "$packages" -- "$prefix")) @@ -88,6 +97,8 @@ _guix_complete_file () COMPREPLY=() } +declare _guix_subcommands + _guix_complete () { local word_count=${#COMP_WORDS[*]} @@ -105,8 +116,12 @@ _guix_complete () case $COMP_CWORD in 1) - local subcommands="$(guix --help | grep '^ ' | cut -c 2-)" - COMPREPLY=($(compgen -W "$subcommands" -- "$word_at_point")) + if [ -z "$_guix_subcommands" ] + then + # Cache the list of subcommands to speed things up. + _guix_subcommands="$(guix --help | grep '^ ' | cut -c 2-)" + fi + COMPREPLY=($(compgen -W "$_guix_subcommands" -- "$word_at_point")) ;; *) if _guix_is_command "package" |