@@ -2610,14 +2610,31 @@ _comp_xfunc()
2610
2610
}
2611
2611
2612
2612
# 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
2615
2632
for _comp__init_file in " $_comp__init_compat_dir " /* ; do
2616
2633
[[ ${_comp__init_file##*/ } != @ ($_comp_backup_glob | Makefile* | ${BASH_COMPLETION_COMPAT_IGNORE-} ) &&
2617
2634
-f $_comp__init_file && -r $_comp__init_file ]] && . " $_comp__init_file "
2618
2635
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
2621
2638
2622
2639
# source user completion file
2623
2640
#
0 commit comments