diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2010-07-09 14:47:48 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2010-07-09 14:47:48 +0000 |
commit | 5da6530d831ea8a00943b39359d535ea59996894 (patch) | |
tree | 2a4fcd827214fa4fd2a8d172341a07cb8b76cda0 /Functions/Chpwd/_cdr | |
parent | 924f40b772d7c222ffe8db502fb88cc897fd9902 (diff) | |
download | zsh-5da6530d831ea8a00943b39359d535ea59996894.tar.gz zsh-5da6530d831ea8a00943b39359d535ea59996894.tar.xz zsh-5da6530d831ea8a00943b39359d535ea59996894.zip |
28065 plus unposted zsh.mdd:
add cdr and related functions and docs
Diffstat (limited to 'Functions/Chpwd/_cdr')
-rw-r--r-- | Functions/Chpwd/_cdr | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/Functions/Chpwd/_cdr b/Functions/Chpwd/_cdr new file mode 100644 index 000000000..2f52ff54b --- /dev/null +++ b/Functions/Chpwd/_cdr @@ -0,0 +1,57 @@ +#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 |