Cleaner zsh completion
Created by: jamesk
Hi, love autojump, I've just started using it with zsh (and oh-my-zsh) and I had what seemed like a bug in the completion, duplicate folder entries. The completion also automatically added __
to my command as all results from autojump -complete
start with the search term and __
.
Anyway, posting this in case it affects anyone else / you want to incorporate it into autojump.
This is my modified _j
file:
#compdef j
cur=${words[2, -1]}
integer i=1
declare -A displayMap
autojump --complete "${=cur[*]}" | while read c; do
hidden=$(echo "$c" | sed 's/\(.*__[0-9][0-9]*__\).*/\1/')
display=$(echo "$c" | sed 's/.*__[0-9][0-9]*__\(.*\)/\1/')
(( $+displayMap[$display] )) && continue
displayMap[$display]=true
compadd -V $i -U -i "$hidden" "$display";
i=$((i+1))
done
(( $i > 2 )) && compadd -V $i -U "${=cur[*]}"
Modifications:
- It doesn't display the
XXX__N__
prefix - Maintains order via
-V
arg tocompadd
- If there is more than one result: adds a final auto completion entry equal to the user's current argument, this stops the completion from modifying the command until the user actually selects one of the options.