mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-21 12:11:26 +01:00
f7f66ea11f
put zstat in example zshrc
57 lines
1.7 KiB
Text
57 lines
1.7 KiB
Text
#autoload
|
|
#
|
|
# Storage component of completions caching layer
|
|
|
|
local _cache_ident _cache_ident_dir
|
|
_cache_ident="$1"
|
|
|
|
if zstyle -t ":completion:${curcontext}:" use-cache; then
|
|
# Decide which directory to cache to, and ensure it exists
|
|
zstyle -s ":completion:${curcontext}:" cache-path _cache_dir
|
|
: ${_cache_dir:=${ZDOTDIR:-$HOME}/.zcompcache}
|
|
if [[ ! -d "$_cache_dir" ]]; then
|
|
if [[ -e "$_cache_dir" ]]; then
|
|
_message "cache-dir style points to a non-directory\!"
|
|
else
|
|
# if module load fails, we *should* be okay using normal mkdir so
|
|
# we load feature b:mkdir instead of b:zf_mkdir; note that modules
|
|
# loaded in a sub-shell don't affect the parent.
|
|
( zmodload -F zsh/files b:mkdir; mkdir -m 0700 -p "$_cache_dir"
|
|
) 2>/dev/null
|
|
if [[ ! -d "$_cache_dir" ]]; then
|
|
_message "couldn't create cache-dir $_cache_dir"
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
_cache_ident_dir="$_cache_dir/$_cache_ident"
|
|
_cache_ident_dir="$_cache_ident_dir:h"
|
|
|
|
if [[ ! -d "$_cache_ident_dir" ]]; then
|
|
if [[ -e "$_cache_ident_dir" ]]; then
|
|
_message "cache ident dir points to a non-directory:$_cache_ident_dir"
|
|
else
|
|
# See also rationale in zmodload above
|
|
( zmodload -F zsh/files b:mkdir; mkdir -m 0700 -p "$_cache_ident_dir"
|
|
) 2>/dev/null
|
|
if [[ ! -d "$_cache_ident_dir" ]]; then
|
|
_message "couldn't create cache-ident_dir $_cache_ident_dir"
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
shift
|
|
for var; do
|
|
case ${(Pt)var} in
|
|
(*readonly*) ;;
|
|
(*(association|array)*) print -r "$var=( ${(kv@Pqq)^^var} )";;
|
|
(*) print -r "$var=${(Pqq)^^var}";;
|
|
esac
|
|
done >! "$_cache_dir/$_cache_ident"
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
return 0
|