diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2018-12-01 02:48:02 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2018-12-01 02:48:02 +1300 |
commit | 32ca9ad0fa8d7691022a44989c1832672fb51548 (patch) | |
tree | 9ef3779f21a9f2c500d62ca3a31ec37aec930af8 /bash/bash_completion.d/path.bash | |
parent | Merge branch 'release/v2.5.0' (diff) | |
parent | Bump VERSION (diff) | |
download | dotfiles-32ca9ad0fa8d7691022a44989c1832672fb51548.tar.gz dotfiles-32ca9ad0fa8d7691022a44989c1832672fb51548.zip |
Merge branch 'release/v2.6.0'v2.6.0
* release/v2.6.0: (26 commits)
Bump VERSION
Overhaul and expand abook address Bash completion
Restore correct completion function for mutt(1)
Use simpler keyword complete for `path` subcommand
Break up a couple of long lines
Remove unneeded local array declaration
Remove unneeded empty result short circuit
Remove redundant error code in short circuits
Adjust loop short circuits and pattern matches
Remove unneeded quoting in case statement
Remove needless line breaks from git completion
Use inverting exclam mark outside conditional
Remove stray comment no longer applicable
Use array+=() syntax in two Bash completion files
Remove null-result guard from completion gens
Use simpler method of no case completion check
Overhaul `keep` completion
Simplify an array operation in `bd` completion
Overhaul text filename generation
Use full `if` condition for SSH hostname comp src
...
Diffstat (limited to 'bash/bash_completion.d/path.bash')
-rw-r--r-- | bash/bash_completion.d/path.bash | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/bash/bash_completion.d/path.bash b/bash/bash_completion.d/path.bash index 8b72a062..7143b448 100644 --- a/bash/bash_completion.d/path.bash +++ b/bash/bash_completion.d/path.bash @@ -6,10 +6,18 @@ _path() { # Complete operation as first word local cmd - for cmd in list insert append remove shift pop check help ; do - [[ $cmd == "${COMP_WORDS[COMP_CWORD]}"* ]] || continue + while read -r cmd ; do COMPREPLY[${#COMPREPLY[@]}]=$cmd - done + done < <(compgen -W ' + append + check + help + insert + list + pop + remove + shift + ' -- "${COMP_WORDS[COMP_CWORD]}") # Complete with either directories or $PATH entries as all other words else @@ -26,17 +34,12 @@ _path() { # Set options to glob correctly shopt -s dotglob nullglob - # Make globbing case-insensitive if appropriate; is there a cleaner way - # to find this value? - while read -r _ option value ; do - case $option in - (completion-ignore-case) - case $value in - (on) - shopt -s nocaseglob - break - ;; - esac + # Make globbing case-insensitive if appropriate + while read -r _ setting ; do + case $setting in + ('completion-ignore-case on') + shopt -s nocaseglob + break ;; esac done < <(bind -v) @@ -46,25 +49,23 @@ _path() { dirnames=("${COMP_WORDS[COMP_CWORD]}"*/) dirnames=("${dirnames[@]%/}") - # Print quoted entries, null-delimited, if there was at - # least one; otherwise, just print a null character to stop - # this hanging in Bash 4.4 - if ((${#dirnames[@]})) ; then - printf '%q\0' "${dirnames[@]}" - else - printf '\0' - fi + # Print quoted entries, null-delimited + printf '%q\0' "${dirnames[@]}" ) ;; # Complete with directories from PATH remove) local -a promptarr - IFS=: read -rd '' -a promptarr < <(printf '%s\0' "$PATH") + IFS=: read -rd '' -a promptarr < \ + <(printf '%s\0' "$PATH") local part for part in "${promptarr[@]}" ; do - [[ $part == "${COMP_WORDS[COMP_CWORD]}"* ]] || continue - COMPREPLY[${#COMPREPLY[@]}]=$(printf '%q' "$part") + case $part in + "${COMP_WORDS[COMP_CWORD]}"*) + COMPREPLY[${#COMPREPLY[@]}]=$(printf '%q' "$part") + ;; + esac done ;; |