just a ping (updated patch attached). For reference: [#311708] + http://www.mail-archive.com/[email protected]/msg01673.html
May also help solving [#312795] regards Raph On Tue, Dec 29, 2009 at 11:05:27PM +0100, [email protected] wrote: > 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
commit 145ada9206dae5fafa4dadfcecbe3c86ab810dd7 Author: Raphaƫl Droz <[email protected]> Date: Tue Feb 15 16:59:41 2011 +0100 Allow colon-separated BASH_COMPLETION_DIR (Alioth: #311708). diff --git a/bash_completion b/bash_completion index c4ae7c9..6c9f453 100644 --- a/bash_completion +++ b/bash_completion @@ -1652,30 +1652,43 @@ if [ ${#list[@]} -gt 0 ]; then fi unset list +# $1: directory containing completion scripts +load_completion_dir() +{ + local i + 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)|Makefile*) \ + && -f $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)|Makefile*) \ - && -f $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)|Makefile*) \ - && -f $i && -r $i ]] && . "$i" - done +load_completion_dir "$BASH_COMPLETION_COMPAT_DIR" + +# other source(s) (directory or colon-separated list of directories) +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 + # but ignore if == $BASH_COMPLETION_COMPAT_DIR which is already loaded + [[ $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 [email protected] http://lists.alioth.debian.org/mailman/listinfo/bash-completion-devel
