# With arguments, output those files to the recent directory file. # With no arguments, read in the directories from the file into $reply. # # Handles recent-dirs-file and recent-dirs-max styles. emulate -L zsh setopt extendedglob integer max local file local -a files local default=${ZDOTDIR:-$HOME}/.chpwd-recent-dirs if zstyle -a ':chpwd:' recent-dirs-file files; then files=(${files//(#s)+(#e)/$default}) fi if (( ${#files} == 0 )); then files=($default) fi zstyle -s ':chpwd:' recent-dirs-max max || max=20 if (( $# )); then if (( max > 0 && ${#argv} > max )); then argv=(${argv[1,max]}) fi # Quote on write. # Use $'...' quoting... this fixes newlines and other nastiness. print -rl ${(qqqq)argv} >${files[1]} else typeset -g reply # Unquote on read. reply=() for file in $files; do [[ -r $file ]] || continue reply+=(${(Q)${(f)"$(<$file)"}}) if (( max > 0 && ${#reply} >= max )); then reply=(${reply[1,max]}) break fi done fi