Update the bash completion script

I haven't run git blame, but this script hasn't been updated in a while.
Apparently development in 'bash-completion' is moving a lot faster now,
so supporting multiple mutually-incompatible versions of it has become
necessary.

For some reason, this issue wasn't caught on CI - I think the newer
'bash-completion' hasn't reached the distribution used there.  Still,
this code is now forward-compatible.
This commit is contained in:
Arav K. 2024-06-13 02:25:13 +02:00
parent d7bf28deed
commit b1b7230466

View file

@ -31,7 +31,7 @@
# plugins dynamically
#
# Currently, only Bash 3.2 and newer is supported and the
# `bash-completion` package is required.
# `bash-completion` package (v2.10 or newer) is required.
#
# TODO
# ----
@ -47,6 +47,26 @@
# completion package can handle this.
#
if [[ ${BASH_COMPLETION_VERSINFO[0]} -ne 2 \
|| ${BASH_COMPLETION_VERSINFO[1]} -lt 10 ]]; then
echo "Incompatible version of 'bash-completion'!"
return 1
fi
# The following functions are introduced by bash-completion v2.12, and
# at the same time the functions they replace are deprecated. In order
# to avoid using deprecated functions, here are some forward-compatible
# aliases which use the deprecated functions when necessary.
if [[ ${BASH_COMPLETION_VERSINFO[1]} -lt 12 ]]; then
_comp_get_words() {
_get_comp_words_by_ref "$@"
}
_comp_compgen_filedir() {
_filedir "$@"
}
fi
# Determines the beets subcommand and dispatches the completion
# accordingly.
@ -54,7 +74,7 @@ _beet_dispatch() {
local cur prev cmd=
COMPREPLY=()
_get_comp_words_by_ref -n : cur prev
_comp_get_words -n : cur prev
# Look for the beets subcommand
local arg
@ -99,7 +119,7 @@ _beet_complete() {
completions="${flags___common} ${opts} ${flags}"
COMPREPLY+=( $(compgen -W "$completions" -- $cur) )
else
_filedir
_comp_compgen_filedir
fi
}
@ -114,12 +134,12 @@ _beet_complete_global() {
;;
-l|--library|-c|--config)
# Filename completion
_filedir
_comp_compgen_filedir
return
;;
-d|--directory)
# Directory completion
_filedir -d
_comp_compgen_filedir -d
return
;;
esac