diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2015-10-21 14:28:49 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2015-10-21 14:28:49 +1300 |
commit | f0812b4f1a8e987faccf85ac309a8b7c024f791c (patch) | |
tree | 7761f031bbd56c3ef47b820bf839a59fa60f901a /bash/bashrc.d/sd.bash | |
parent | Fix backwards test (diff) | |
download | dotfiles-f0812b4f1a8e987faccf85ac309a8b7c024f791c.tar.gz dotfiles-f0812b4f1a8e987faccf85ac309a8b7c024f791c.zip |
Exclude stuff not a filename in current directory
Otherwise Bash adds a slash to it. %q quoting isn't perfect, but it's
better
Diffstat (limited to 'bash/bashrc.d/sd.bash')
-rw-r--r-- | bash/bashrc.d/sd.bash | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/bash/bashrc.d/sd.bash b/bash/bashrc.d/sd.bash index d127321e..75f220d8 100644 --- a/bash/bashrc.d/sd.bash +++ b/bash/bashrc.d/sd.bash @@ -133,12 +133,20 @@ _sd() { dirnames=("${dirnames[@]#../}") dirnames=("${dirnames[@]%/}") + # Iterate again, but exclude the current directory this time + local -a sibs + local dirname + for dirname in "${dirnames[@]}" ; do + [[ $dirname != "${PWD##*/}" ]] || continue + sibs=("${sibs[@]}" "$dirname") + done + # Bail if no results to prevent empty output - ((${#dirnames[@]})) || exit 1 + ((${#sibs[@]})) || exit 1 # Print results, null-delimited - printf '%s\0' "${dirnames[@]}" + printf '%q\0' "${sibs[@]}" ) } -complete -F _sd -o filenames sd +complete -F _sd sd |