#!/usr/bin/env zsh if (( ${+_z4h_dir_hist_fd} )); then zle -F "$_z4h_dir_hist_fd" exec {_z4h_dir_hist_fd}>&- unset _z4h_dir_hist_fd fi local dir zstyle -s :z4h:dir-history: cwd dir || dir=${(%):-%~} [[ -z $dir || $dir == ${_z4h_last_dir-} ]] && return eval "$_z4h_opt" typeset -g _z4h_last_dir=$dir [[ $dir != ('~'|/)* ]] && return -z4h-read-dir-history || return if (( ! $#dirstack && (DIRSTACKSIZE || ! $+DIRSTACKSIZE) )); then local d stack=() for d in $_z4h_dir_history; do { if [[ ($#stack -ne 0 || $d != $dir) ]]; then d=${~d} if [[ -d ${d::=${(g:oce:)d}} ]]; then stack+=($d) (( $+DIRSTACKSIZE && $#stack >= DIRSTACKSIZE - 1 )) && break fi fi } always { TRY_BLOCK_ERROR=0 } done 2>/dev/null dirstack=($stack) fi local -i pos=$_z4h_dir_history[(ie)$dir] _z4h_dir_history[pos]=() _z4h_dir_history[1,0]=($dir) local max_size zstyle -s :z4h:dir-history: max-size max_size if [[ $max_size != -<-> ]]; then [[ $max_size == <-> ]] || max_size=10000 local -i drop=$(($#_z4h_dir_history - max_size)) if (( drop > 0 )); then _z4h_dir_history[-drop,-1]=() fi fi -z4h-write-dir-history