|
2 | 2 | # vim: ft=zsh sw=2 ts=2 et
|
3 | 3 |
|
4 | 4 | builtin emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
5 |
| -builtin setopt extended_glob warn_create_global typeset_silent no_short_loops rc_quotes no_auto_pushd |
| 5 | +builtin setopt extended_glob warn_create_global typeset_silent \ |
| 6 | + no_short_loops rc_quotes no_auto_pushd local_options |
6 | 7 |
|
7 |
| -local -a input=( $@ ) chpwd_functions; integer count ret=0 |
8 |
| -local md5_hash zoxide_cache zoxide_cache_dir __zoxide_z_prefix |
9 |
| -local counter_file max=${ZEC_MAX:-1000} |
| 8 | +typeset -gA ZEC |
| 9 | +typeset -i count=0 ret=0 |
| 10 | +typeset -a input_array=( "$@" ) |
| 11 | +typeset -ga chpwd_functions __zoxide_z_prefix |
10 | 12 |
|
11 |
| -md5_hash="no_hash" |
12 |
| -zoxide_cache_dir="${Plugins[ZSH_ZOXIDE]}/._zoxide" |
| 13 | +: ${ZEC[CACHE_DIR]:=${ZEC[CACHE_DIR]:-${Plugins[ZSH_ZOXIDE]}/._zoxide}} |
| 14 | +: ${ZEC[MD5_HASH]:=${ZEC[MD5_HASH]:-no_hash}} |
| 15 | +: ${ZEC[DISABLED]:=${ZEC[DISABLED]:-0}} |
| 16 | +: ${ZEC[DEBUG]:=${ZEC[DEBUG]:-0}} |
| 17 | +: ${ZEC[MAX]:=${ZEC[MAX]:-1000}} |
13 | 18 |
|
14 |
| -[[ -d $zoxide_cache_dir ]] || command mkdir -p $zoxide_cache_dir &> /dev/null |
| 19 | +ZEC[CACHE_DIR]=${~ZEC[CACHE_DIR]} |
| 20 | + |
| 21 | +: ${ZEC[CACHE]:=${ZEC[CACHE]:-${ZEC[CACHE_DIR]}/${ZEC[MD5_HASH]}.zsh}} |
| 22 | +: ${ZEC[COUNT]:=${ZEC[COUNT]:-${ZEC[CACHE_DIR]}/${ZEC[MD5_HASH]}.txt}} |
| 23 | + |
| 24 | +[[ -d $ZEC[CACHE_DIR] ]] || command mkdir -p $ZEC[CACHE_DIR] &> /dev/null |
15 | 25 |
|
16 | 26 | if (( $+commands[md5] )); then
|
17 |
| - md5_hash=$(md5 <<< $input) |
| 27 | + ZEC[MD5_HASH]=$(md5 <<< $input_array) |
18 | 28 | elif (( $+commands[md5sum] )); then
|
19 |
| - md5_hash=$(md5sum <<< $input | awk '{ print $1 }') |
| 29 | + ZEC[MD5_HASH]=$(md5sum <<< $input_array | awk '{ print $1 }') |
20 | 30 | else
|
21 | 31 | print "@zsh-eval-cache: md5 program not found"; return 1
|
22 | 32 | fi
|
23 | 33 |
|
24 |
| -zoxide_cache="${zoxide_cache_dir}/${md5_hash}.zsh" |
25 |
| -counter_file="${zoxide_cache_dir}/${md5_hash}.txt" |
26 |
| - |
27 |
| -if (( ZEC_DISABLED )); then |
28 |
| - (( ZEC_DEBUG )) && builtin print -Pr "@zsh-eval-cache: disabled" |
29 |
| - eval "$( $input )"; ret=$? |
30 |
| -elif [[ -s $zoxide_cache ]]; then |
31 |
| - [[ -f $counter_file ]] || builtin print 1 > $counter_file 2> /dev/null |
| 34 | +if (( ZEC[DISABLED] )); then |
| 35 | + (( ZEC[DEBUG] )) && builtin print -Pr "@zsh-eval-cache: disabled" |
| 36 | + eval "$( ${(@)input_array} )"; ret=$? |
| 37 | +elif [[ -s $ZEC[CACHE] ]]; then |
| 38 | + [[ -f $ZEC[COUNT] ]] || builtin print 1 > $ZEC[COUNT] 2> /dev/null |
32 | 39 |
|
33 |
| - count=$(<$counter_file) && (( count++ )) |
34 |
| - builtin print $count > $counter_file 2> /dev/null |
| 40 | + count=$(<$ZEC[COUNT]) && (( count++ )) |
| 41 | + builtin print $count > $ZEC[COUNT] 2> /dev/null |
35 | 42 |
|
36 |
| - (( ZEC_DEBUG )) && builtin print -Pr "@zsh-eval-cache: hit $count" |
| 43 | + (( ZEC[DEBUG] )) && builtin print -Pr "@zsh-eval-cache: hit $count" |
37 | 44 |
|
38 |
| - builtin source $zoxide_cache; ret=$? |
| 45 | + builtin source $ZEC[CACHE]; ret=$? |
39 | 46 | else
|
40 |
| - [[ -f $counter_file ]] || builtin print 1 > $counter_file 2> /dev/null |
| 47 | + [[ -f $ZEC[COUNT] ]] || builtin print 1 > $ZEC[COUNT] 2> /dev/null |
41 | 48 |
|
42 |
| - (( ZEC_DEBUG )) && builtin print -Pr "@zsh-eval-cache: miss" |
| 49 | + (( ZEC[DEBUG] )) && builtin print -Pr "@zsh-eval-cache: miss" |
43 | 50 |
|
44 |
| - $input > $zoxide_cache && zcompile -U $zoxide_cache && builtin source $zoxide_cache; ret=$? |
| 51 | + ${(@)input_array} >! $ZEC[CACHE] && zcompile -U $ZEC[CACHE] && builtin source $ZEC[CACHE]; ret=$? |
45 | 52 | fi
|
46 | 53 |
|
47 |
| -(( count > max )) && command rm -rf ${zoxide_cache_dir} &> /dev/null |
| 54 | +(( count > ZEC[MAX] )) && command rm -rf $ZEC[CACHE_DIR] &> /dev/null |
| 55 | + |
| 56 | +(( ret )) && builtin print -Pr "@zsh-eval-cache: failed to initialize zoxide" >&2 |
48 | 57 |
|
49 | 58 | (( ret )) && builtin print -Pr "@zsh-eval-cache: failed to initialize zoxide" >&2
|
50 | 59 |
|
|
0 commit comments