mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 13:33:52 +01:00
52 lines
1.4 KiB
Plaintext
52 lines
1.4 KiB
Plaintext
#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
|
|
(zmodload zsh/files 2>/dev/null; mkdir -p "$_cache_dir" )
|
|
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
|
|
(zmodload zsh/files 2>/dev/null; mkdir -p "$_cache_ident_dir")
|
|
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
|