aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-08-20 19:57:33 +0200
committerLudovic Courtès <ludo@gnu.org>2015-08-20 19:57:33 +0200
commit4a9999871cc75f2d73d5dc83fbcad88bcaa5b921 (patch)
tree8452b8e4b440defff70019a9aa7e608ef143737f
parentfa96048f0a97b4265b3c52f30a5accf89e96174b (diff)
downloadguix-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/guix23
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"