Skip to content

Commit cdd8a15

Browse files
committed
feat(bash_completion.d): load from one relative to the main script
Primarily for run-in-place-from-git-clone setups.
1 parent 9a387d1 commit cdd8a15

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

bash_completion

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2610,14 +2610,31 @@ _comp_xfunc()
26102610
}
26112611
26122612
# source compat completion directory definitions
2613-
_comp__init_compat_dir=${BASH_COMPLETION_COMPAT_DIR:-/etc/bash_completion.d}
2614-
if [[ -d $_comp__init_compat_dir && -r $_comp__init_compat_dir && -x $_comp__init_compat_dir ]]; then
2613+
_comp__init_compat_dirs=()
2614+
if [[ -n $BASH_COMPLETION_COMPAT_DIR ]]; then
2615+
_comp__init_compat_dirs+=("$BASH_COMPLETION_COMPAT_DIR")
2616+
else
2617+
_comp__init_compat_dirs+=(/etc/bash_completion.d)
2618+
# Similarly as for the "completions" dir, look up from relative to
2619+
# bash_completion, primarily for run-in-place-from-git-clone setups.
2620+
# Notably we do it after the system location here, in order to
2621+
# prefer in-tree variables and functions.
2622+
if [[ $BASH_SOURCE == */* ]]; then
2623+
_comp__init_compat_dir="${BASH_SOURCE%/*}/bash_completion.d"
2624+
[[ ${_comp__init_compat_dirs[0]} == "$_comp__init_compat_dir" ]] ||
2625+
_comp__init_compat_dirs+=("$_comp__init_compat_dir")
2626+
else
2627+
_comp__init_compat_dirs+=(./bash_completion.d)
2628+
fi
2629+
fi
2630+
for _comp__init_compat_dir in "${_comp__init_compat_dirs[@]}"; do
2631+
[[ -d $_comp__init_compat_dir && -r $_comp__init_compat_dir && -x $_comp__init_compat_dir ]] || continue
26152632
for _comp__init_file in "$_comp__init_compat_dir"/*; do
26162633
[[ ${_comp__init_file##*/} != @($_comp_backup_glob|Makefile*|${BASH_COMPLETION_COMPAT_IGNORE-}) &&
26172634
-f $_comp__init_file && -r $_comp__init_file ]] && . "$_comp__init_file"
26182635
done
2619-
fi
2620-
unset -v _comp__init_compat_dir _comp__init_file
2636+
done
2637+
unset -v _comp__init_compat_dirs _comp__init_compat_dir _comp__init_file
26212638
26222639
# source user completion file
26232640
#

doc/configuration.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ used instead of it.
2020

2121
### `BASH_COMPLETION_COMPAT_DIR`
2222

23-
Directory for pre-dynamic loading era (pre-2.0) backwards compatibility
24-
completion files that are loaded eagerly from `bash_completion` when it is
25-
loaded. If unset or null, the default compatibility directory to use is
26-
`/etc/bash_completion.d`.
23+
Directory for pre-dynamic loading era (pre-2.0) and other backwards
24+
compatibility completion files that are loaded eagerly from `bash_completion`
25+
when it is loaded. If unset or null, the default compatibility directories to
26+
use are `/etc/bash_completion.d`, and `bash_completion.d` relative to
27+
`bash_completion` location.
2728

2829
### `BASH_COMPLETION_FILEDIR_FALLBACK`
2930

0 commit comments

Comments
 (0)