From d0edad20fb5efc2dfc493345e1e7419c39a5558f Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sun, 2 Dec 2018 12:14:22 +1300 Subject: Use consistent temp names for shell subfile vars --- bash/bashrc | 8 ++++---- bash/bashrc.d/completion.bash | 32 +++++++++++++++++++++++++------- 2 files changed, 29 insertions(+), 11 deletions(-) (limited to 'bash') diff --git a/bash/bashrc b/bash/bashrc index 3b4c91bd..a05526f2 100644 --- a/bash/bashrc +++ b/bash/bashrc @@ -95,8 +95,8 @@ if ((BASH_VERSINFO[0] >= 4)) ; then fi # Load Bash-specific startup files -for sh in "$HOME"/.bashrc.d/*.bash ; do - [[ -e $sh ]] || continue - source "$sh" +for bash in "$HOME"/.bashrc.d/*.bash ; do + [[ -e $bash ]] || continue + source "$bash" done -unset -v sh +unset -v bash diff --git a/bash/bashrc.d/completion.bash b/bash/bashrc.d/completion.bash index ff3a95c1..5161a0bf 100644 --- a/bash/bashrc.d/completion.bash +++ b/bash/bashrc.d/completion.bash @@ -108,19 +108,37 @@ if ((BASH_VERSINFO[0] >= 4)) ; then # Handler tries to load appropriate completion for commands _completion_loader() { - [[ -n $1 ]] || return + + # Check completed command for validity + case $1 in + # Not empty + '') return 1 ;; + # Not starting with an underscore + _*) return 1 ;; + esac + + # Build expected path for the command completion local compspec compspec=$HOME/.bash_completion.d/$1.bash - [[ -f $compspec ]] || return - source "$compspec" >/dev/null 2>&1 && return 124 + + # Skip directories and nonexistent files + [[ -e $compspec ]] || return + ! [[ -d $compspec ]] || return + + # Try to read the file, return 124 if it worked + if source "$compspec" ; then + return 124 + fi } + + # Set completion loader to use the above function complete -D -F _completion_loader -o bashdefault -o default # If not, load all of the completions up now else - for sh in "$HOME"/.bash_completion.d/*.bash ; do - [[ -e $sh ]] || continue - source "$sh" + for bash in "$HOME"/.bash_completion.d/[^_]*.bash ; do + [[ -e $bash ]] || continue + source "$bash" done - unset -v sh + unset -v bash fi -- cgit v1.2.3