diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2018-12-02 23:10:23 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2018-12-02 23:10:23 +1300 |
commit | f7b14abebc09ac9720c259c26b91b0640d2555a0 (patch) | |
tree | 8458d8d90eec9c3b58ea23fa2f373b20ca9eebb7 /bash/bash_completion.d/bd.bash | |
parent | Remove unneeded braces (diff) | |
download | dotfiles-f7b14abebc09ac9720c259c26b91b0640d2555a0.tar.gz dotfiles-f7b14abebc09ac9720c259c26b91b0640d2555a0.zip |
Make bd() and sd() match quoted and unquoted words
I suspect there's a more correct way to do this, but it's working well
for the moment.
Diffstat (limited to 'bash/bash_completion.d/bd.bash')
-rw-r--r-- | bash/bash_completion.d/bd.bash | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/bash/bash_completion.d/bd.bash b/bash/bash_completion.d/bd.bash index 4dde0eac..32969522 100644 --- a/bash/bash_completion.d/bd.bash +++ b/bash/bash_completion.d/bd.bash @@ -36,10 +36,18 @@ _bd() { # Iterate through the nodes and print the ones that match the word # being completed, with a trailing slash as terminator for node in "${nodes[@]}" ; do - case $node in - ("$2"*) printf '%s/' "$node" ;; - esac + node_quoted=$(printf '%q' "$node") + # Check the quoted and unquoted word for matching + for match in "$node" "$(printf '%q' "$node")" ; do + # Print any match, slash-terminated + case $match in + ("$2"*) + printf '%s/' "$node" + continue + ;; + esac + done done ) } -complete -F _bd bd +complete -F _bd -o filenames bd |