Hi, I rewrote the patch submitted in #311708. It lets an user to source /etc/bash_completion.d, ~/.bash_completion.d, ~/dev/bashcompgit/contrib, ...
I considere splitting $BASH_COMPLETION_DIR in several directories if the full variable isn't a valid directory as an enhancement. As I can't attach to closed bugs, patch is attached here. Raph
diff --git a/bash_completion b/bash_completion index 248bd25..9886671 100644 --- a/bash_completion +++ b/bash_completion @@ -1768,30 +1768,42 @@ if [ ${#li...@]} -gt 0 ]; then fi unset list +# arg 1 : directory to load completions from +load_completion_dir() +{ + [ -z "$1" ] && return 1 + local i + echo "loading $1" + if [[ -d "$1" && -r "$1" && -x "$1" ]]; then + for i in $(LC_ALL=C command ls "$1"); do + i="$1/$i" + [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)) \ + && ( -f $i || -h $i ) && -r $i ]] && . $i + done + return 0 + fi + return 1 +} + # source completion directory definitions -if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \ - -x $BASH_COMPLETION_COMPAT_DIR ]]; then - for i in $(LC_ALL=C command ls $BASH_COMPLETION_COMPAT_DIR); do - i=$BASH_COMPLETION_COMPAT_DIR/$i - [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)) \ - && ( -f $i || -h $i ) && -r $i ]] && . $i - done -fi -if [[ $BASH_COMPLETION_DIR != $BASH_COMPLETION_COMPAT_DIR && \ - -d $BASH_COMPLETION_DIR && -r $BASH_COMPLETION_DIR && \ - -x $BASH_COMPLETION_DIR ]]; then - for i in $(LC_ALL=C command ls $BASH_COMPLETION_DIR); do - i=$BASH_COMPLETION_DIR/$i - [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)) \ - && ( -f $i || -h $i ) && -r $i ]] && . $i - done +load_completion_dir "$BASH_COMPLETION_COMPAT_DIR" +if [[ $BASH_COMPLETION_DIR != $BASH_COMPLETION_COMPAT_DIR ]]; then + # if we can't load $BASH_COMPLETION_DIR, then split the variable + if ! load_completion_dir "$BASH_COMPLETION_DIR"; then + # and attempt to load each part + # (spaces in completion directories would mess it up) + for each_comp_dir in ${BASH_COMPLETION_DIR[*]//:/ }; do + [[ $each_comp_dir != $BASH_COMPLETION_COMPAT_DIR ]] && \ + load_completion_dir "$each_comp_dir" + done + unset each_comp_dir + fi fi -unset i # source user completion file [[ $BASH_COMPLETION != ~/.bash_completion && -r ~/.bash_completion ]] \ && . ~/.bash_completion -unset -f have +unset -f have load_completion_dir unset UNAME USERLAND have set $BASH_COMPLETION_ORIGINAL_V_VALUE
_______________________________________________ Bash-completion-devel mailing list Bash-completion-devel@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/bash-completion-devel