58 lines
1.2 KiB
Plaintext
58 lines
1.2 KiB
Plaintext
|
#compdef cdr
|
||
|
|
||
|
local expl insert_string
|
||
|
integer default insert
|
||
|
|
||
|
zstyle -t ':chpwd:' recent-dirs-default && default=1
|
||
|
if (( default )); then
|
||
|
zstyle -s ":completion:${curcontext}:" recent-dirs-insert insert_string
|
||
|
case $insert_string in
|
||
|
(both)
|
||
|
insert=4
|
||
|
;;
|
||
|
|
||
|
(fallback)
|
||
|
insert=3
|
||
|
;;
|
||
|
|
||
|
(always)
|
||
|
insert=2
|
||
|
;;
|
||
|
|
||
|
([tT]*|1|[yY]*)
|
||
|
insert=1
|
||
|
;;
|
||
|
|
||
|
(*)
|
||
|
insert=0
|
||
|
esac
|
||
|
fi
|
||
|
|
||
|
# See if we should fall back to cd completion.
|
||
|
if [[ default -ne 0 && insert -lt 2 && \
|
||
|
( CURRENT -ne 2 || (-n $words[2] && $words[2] != <->) ) ]]; then
|
||
|
$_comps[cd] "$@"
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
local -a values keys
|
||
|
|
||
|
if (( insert )); then
|
||
|
# insert the actual directory, not the number
|
||
|
values=(${${(f)"$(cdr -l)"}##<-> ##})
|
||
|
# Suppress the usual space suffix, since there's no further argument
|
||
|
# and it's useful to be able to edit the directory e.g. add /more/stuff.
|
||
|
if _wanted -V recent-dirs expl 'recent directory' compadd -S '' -Q -a values
|
||
|
then
|
||
|
(( insert == 4 )) || return 0
|
||
|
fi
|
||
|
|
||
|
(( insert >= 3 )) || return
|
||
|
$_comps[cd] "$@"
|
||
|
else
|
||
|
values=(${${(f)"$(cdr -l)"}/ ##/:})
|
||
|
keys=(${values%%:*})
|
||
|
|
||
|
_describe -t dir-index 'recent directory index' values keys -V unsorted
|
||
|
fi
|