mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
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.
This commit is contained in:
parent
fa96048f0a
commit
4a9999871c
1 changed files with 19 additions and 4 deletions
|
@ -18,15 +18,24 @@
|
||||||
|
|
||||||
# Bash completion for Guix commands.
|
# Bash completion for Guix commands.
|
||||||
|
|
||||||
|
declare _guix_available_packages
|
||||||
|
|
||||||
_guix_complete_available_package ()
|
_guix_complete_available_package ()
|
||||||
{
|
{
|
||||||
local prefix="$1"
|
local prefix="$1"
|
||||||
local packages="$(${COMP_WORDS[0]} package -A "^$prefix" | cut -f1)"
|
if [ -z "$_guix_available_packages" ]
|
||||||
COMPREPLY=($(compgen -W "$packages" -- "$prefix"))
|
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 ()
|
_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 prefix="$1"
|
||||||
local packages="$(${COMP_WORDS[0]} package -I "^$prefix" | cut -f1)"
|
local packages="$(${COMP_WORDS[0]} package -I "^$prefix" | cut -f1)"
|
||||||
COMPREPLY=($(compgen -W "$packages" -- "$prefix"))
|
COMPREPLY=($(compgen -W "$packages" -- "$prefix"))
|
||||||
|
@ -88,6 +97,8 @@ _guix_complete_file ()
|
||||||
COMPREPLY=()
|
COMPREPLY=()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare _guix_subcommands
|
||||||
|
|
||||||
_guix_complete ()
|
_guix_complete ()
|
||||||
{
|
{
|
||||||
local word_count=${#COMP_WORDS[*]}
|
local word_count=${#COMP_WORDS[*]}
|
||||||
|
@ -105,8 +116,12 @@ _guix_complete ()
|
||||||
|
|
||||||
case $COMP_CWORD in
|
case $COMP_CWORD in
|
||||||
1)
|
1)
|
||||||
local subcommands="$(guix --help | grep '^ ' | cut -c 2-)"
|
if [ -z "$_guix_subcommands" ]
|
||||||
COMPREPLY=($(compgen -W "$subcommands" -- "$word_at_point"))
|
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"
|
if _guix_is_command "package"
|
||||||
|
|
Loading…
Reference in a new issue