mirror of
https://github.com/zdharma-continuum/zinit.git
synced 2026-09-10 07:36:38 -04:00
The ___moved guard skipped the restore whenever zinit did not cd itself, so an ice body that cds under nocd stranded the shell wherever the plugin left it. Make the restore unconditional and give .zinit-restore-dir a fast path so the case where nothing moved stays free. Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
3451 lines
155 KiB
Bash
3451 lines
155 KiB
Bash
#
|
||
# zdharma-continuum/zinit/zinit.zsh
|
||
# Copyright (c) 2016-2021 Sebastian Gniazdowski
|
||
# Copyright (c) 2021-2023 zdharma-continuum
|
||
# Homepage: https://github.com/zdharma-continuum/zinit
|
||
# License: MIT License
|
||
#
|
||
|
||
#
|
||
# Main state variables.
|
||
#
|
||
|
||
typeset -gaH ZINIT_REGISTERED_PLUGINS ZINIT_TASKS ZINIT_RUN
|
||
typeset -ga zsh_loaded_plugins
|
||
if (( !${#ZINIT_TASKS} )) { ZINIT_TASKS=( "<no-data>" ); }
|
||
# Snippets loaded, url -> file name.
|
||
typeset -gAH ZINIT ZINIT_SNIPPETS ZINIT_REPORTS ZINIT_ICES ZINIT_SICE ZINIT_CUR_BIND_MAP ZINIT_EXTS ZINIT_EXTS2
|
||
typeset -gaH ZINIT_COMPDEF_REPLAY
|
||
|
||
# Compatibility with pre-rename project (Zplugin).
|
||
typeset -gAH ZPLGM
|
||
ZINIT=( "${(kv)ZPLGM[@]}" "${(kv)ZINIT[@]}" )
|
||
unset ZPLGM
|
||
|
||
#
|
||
# Allow configuring ZINIT[...] settings via zstyle, e.g.:
|
||
# zstyle ':zinit:config' home-dir ~/.zinit
|
||
# zstyle ':zinit:config' bin-dir ~/.zinit/zinit.git
|
||
# An explicitly-set ZINIT[KEY] always wins over the matching zstyle.
|
||
#
|
||
if zmodload -F zsh/zutil +b:zstyle 2>/dev/null || (( ${+builtins[zstyle]} )); then
|
||
() {
|
||
local _attr _key
|
||
local -A _map=(
|
||
bin-dir BIN_DIR home-dir HOME_DIR
|
||
plugins-dir PLUGINS_DIR completions-dir COMPLETIONS_DIR
|
||
snippets-dir SNIPPETS_DIR services-dir SERVICES_DIR
|
||
module-dir MODULE_DIR polaris-dir POLARIS_DIR
|
||
zpfx ZPFX man-dir MAN_DIR
|
||
list-command LIST_COMMAND zcompdump-path ZCOMPDUMP_PATH
|
||
compinit-opts COMPINIT_OPTS mute-warnings MUTE_WARNINGS
|
||
no-aliases NO_ALIASES packages-branch PACKAGES_BRANCH
|
||
packages-repo PACKAGES_REPO
|
||
optimize-out-disk-accesses OPTIMIZE_OUT_DISK_ACCESSES
|
||
)
|
||
for _attr _key in "${(kv)_map[@]}"; do
|
||
[[ -n ${ZINIT[$_key]} ]] && continue
|
||
zstyle -s ':zinit:config' "$_attr" "ZINIT[$_key]"
|
||
done
|
||
}
|
||
fi
|
||
|
||
#
|
||
# Common needed values.
|
||
#
|
||
|
||
[[ ! -e ${ZINIT[BIN_DIR]}/zinit.zsh ]] && ZINIT[BIN_DIR]=
|
||
|
||
# Respect the plugin standard too.
|
||
ZINIT[ZERO]="${ZERO:-${${0:#$ZSH_ARGZERO}:-${(%):-%N}}}"
|
||
[[ ! -o functionargzero || ${options[posixargzero]} = on || ${ZINIT[ZERO]} != */* ]] && ZINIT[ZERO]="${(%):-%N}"
|
||
|
||
: ${ZINIT[BIN_DIR]:="${ZINIT[ZERO]:h}"}
|
||
[[ ${ZINIT[BIN_DIR]} = \~* ]] && ZINIT[BIN_DIR]=${~ZINIT[BIN_DIR]}
|
||
|
||
# Make ZINIT[BIN_DIR] path absolute.
|
||
ZINIT[BIN_DIR]="${${(M)ZINIT[BIN_DIR]:#/*}:-$PWD/${ZINIT[BIN_DIR]}}"
|
||
|
||
# Final test of ZINIT[BIN_DIR].
|
||
if [[ ! -e ${ZINIT[BIN_DIR]}/zinit.zsh ]]; then
|
||
builtin print -P "%F{196}Could not establish ZINIT[BIN_DIR] hash field. It should point where Zinit's Git repository is.%f"
|
||
return 1
|
||
fi
|
||
|
||
# User can override ZINIT[HOME_DIR].
|
||
if [[ -z ${ZINIT[HOME_DIR]} ]]; then
|
||
# Search for zinit home in the usual locations
|
||
if [[ -d ${XDG_DATA_HOME:-${HOME}/.local/share}/zinit ]]; then
|
||
ZINIT[HOME_DIR]="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit"
|
||
elif [[ -d $HOME/.zinit ]]; then
|
||
ZINIT[HOME_DIR]="$HOME/.zinit"
|
||
elif [[ -d ${ZDOTDIR:-$HOME}/.zinit ]]; then
|
||
ZINIT[HOME_DIR]="${ZDOTDIR:-$HOME}/.zinit"
|
||
elif [[ -d $HOME/.zplugin ]]; then
|
||
ZINIT[HOME_DIR]="$HOME/.zplugin"
|
||
elif [[ -d ${ZDOTDIR:-$HOME}/.zplugin ]]; then
|
||
ZINIT[HOME_DIR]="${ZDOTDIR:-$HOME}/.zplugin"
|
||
else
|
||
ZINIT[HOME_DIR]="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit"
|
||
fi
|
||
fi
|
||
|
||
if [[ -z ${ZINIT[LIST_COMMAND]} ]]; then
|
||
if (( ${+commands[eza]} )); then
|
||
ZINIT[LIST_COMMAND]='eza --color=always --tree --icons -L3'
|
||
elif (( ${+commands[exa]} )); then
|
||
ZINIT[LIST_COMMAND]='exa --color=always --tree --icons -L3'
|
||
elif (( ${+commands[tree]} )); then
|
||
ZINIT[LIST_COMMAND]='tree -L 3 -C --charset utf-8'
|
||
else
|
||
ZINIT[LIST_COMMAND]='ls --tree'
|
||
fi
|
||
fi
|
||
|
||
ZINIT[ice-list]="\
|
||
\!bash|\!csh|\!ksh|\!sh|\
|
||
aliases|as|atclone|atdelete|atinit|atload|atpull|autoload|\
|
||
bash|binary|bindmap|blockf|bpick|build|\
|
||
cloneonly|cloneopts|cmake|compile|completions|configure|countdown|cp|csh|\
|
||
debug|depth|\
|
||
extract|\
|
||
from|git|\
|
||
has|\
|
||
id-as|if|install|is-snippet|\
|
||
ksh|\
|
||
light-mode|link|load|lucid|\
|
||
make|multisrc|mv|nocd|nocompile|nocompletions|notify|null|\
|
||
on-update-of|opts|\
|
||
pack|param|pick|proto|ps-on-unload|ps-on-update|pullopts|\
|
||
reset|reset-prompt|run-atpull|\
|
||
service|sh|silent|src|subscribe|subst|svn|\
|
||
teleid|trackbinds|trigger-load|\
|
||
unload|\
|
||
ver|verbose|\
|
||
wait|wrap"
|
||
ZINIT[nval-ice-list]="\
|
||
\!bash|\!csh|\!ksh|\!sh|\
|
||
aliases|\
|
||
bash|binary|blockf|\
|
||
cloneonly|cloneopts|cmake|configure|countdown|csh|\
|
||
debug|\
|
||
git|\
|
||
is-snippet|\
|
||
ksh|\
|
||
light-mode|lucid|\
|
||
make|\
|
||
nocd|nocompile|nocompletions|notify|null|\
|
||
pullopts|\
|
||
reset|run-atpull|\
|
||
sh|silent|\
|
||
trackbinds|\
|
||
verbose"
|
||
ZINIT[cmds]="\
|
||
add-fpath|\
|
||
bindkeys|\
|
||
cclear|cd|cdclear|cdisable|cdlist|cdreplay|cenable|changes|compile|compiled|compinit|completions|create|creinstall|csearch|cuninstall|\
|
||
delete|debug|\
|
||
edit|env-whitelist|\
|
||
fpath|\
|
||
glance|\
|
||
help|--help|-h|\
|
||
ice|\
|
||
light|load|\
|
||
man|module|\
|
||
plugins|\
|
||
recall|recently|report|run|\
|
||
self-update|snippet|snippets|srv|status|stress|\
|
||
times|\
|
||
uncompile|unload|update|\
|
||
version|\
|
||
zstatus"
|
||
|
||
# Can be customized.
|
||
: ${ZINIT[COMPLETIONS_DIR]:=${ZINIT[HOME_DIR]}/completions}
|
||
: ${ZINIT[MODULE_DIR]:=${ZINIT[HOME_DIR]}/module}
|
||
: ${ZINIT[PACKAGES_BRANCH]:=HEAD}
|
||
: ${ZINIT[PACKAGES_REPO]:=zdharma-continuum/zinit-packages}
|
||
: ${ZINIT[PLUGINS_DIR]:=${ZINIT[HOME_DIR]}/plugins}
|
||
: ${ZINIT[POLARIS_DIR]:=${ZINIT[HOME_DIR]}/polaris}
|
||
: ${ZINIT[SERVICES_DIR]:=${ZINIT[HOME_DIR]}/services}
|
||
: ${ZINIT[SNIPPETS_DIR]:=${ZINIT[HOME_DIR]}/snippets}
|
||
: ${ZINIT[ZPFX]:=${ZINIT[HOME_DIR]}/polaris}
|
||
typeset -g ZPFX
|
||
: ${ZPFX:=${ZINIT[ZPFX]}}
|
||
: ${ZINIT[ALIASES_OPT]::=${${options[aliases]:#off}:+1}}
|
||
: ${ZINIT[MAN_DIR]:=${ZPFX}/man}
|
||
|
||
ZINIT[PLUGINS_DIR]=${~ZINIT[PLUGINS_DIR]} ZINIT[COMPLETIONS_DIR]=${~ZINIT[COMPLETIONS_DIR]}
|
||
ZINIT[SNIPPETS_DIR]=${~ZINIT[SNIPPETS_DIR]} ZINIT[SERVICES_DIR]=${~ZINIT[SERVICES_DIR]}
|
||
|
||
# Make sure $ZSH_CACHE_DIR is writable, otherwise use a directory in $HOME
|
||
if [[ ! -w "$ZSH_CACHE_DIR" ]]; then
|
||
ZSH_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/zinit"
|
||
fi
|
||
|
||
export ZPFX=${~ZPFX} ZSH_CACHE_DIR="${ZSH_CACHE_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/zinit}" \
|
||
PMSPEC=0uUpiPsf
|
||
[[ -z ${path[(re)$ZPFX/bin]} ]] && [[ -d "$ZPFX/bin" ]] && path=( "$ZPFX/bin" "${path[@]}" )
|
||
[[ -z ${path[(re)$ZPFX/sbin]} ]] && [[ -d "$ZPFX/sbin" ]] && path=( "$ZPFX/sbin" "${path[@]}" )
|
||
|
||
hash -f
|
||
hash -d zinit=${ZINIT[HOME_DIR]}
|
||
hash -d plugins=${ZINIT[PLUGINS_DIR]}
|
||
hash -d zpfx=${ZINIT[HOME_DIR]}/polaris
|
||
|
||
# Add completions directory to fpath.
|
||
[[ -z ${fpath[(re)${ZINIT[COMPLETIONS_DIR]}]} ]] && fpath=( "${ZINIT[COMPLETIONS_DIR]}" "${fpath[@]}" )
|
||
|
||
[[ ! -d $ZSH_CACHE_DIR ]] && command mkdir -p "$ZSH_CACHE_DIR"
|
||
[[ -n ${ZINIT[ZCOMPDUMP_PATH]} ]] && ZINIT[ZCOMPDUMP_PATH]=${~ZINIT[ZCOMPDUMP_PATH]}
|
||
|
||
# Create "$ZSH_CACHE_DIR/completions" directory
|
||
[[ ! -d "$ZSH_CACHE_DIR/completions" ]] && command mkdir -p "$ZSH_CACHE_DIR/completions"
|
||
# Add "$ZSH_CACHE_DIR/completions" diretory to fpath
|
||
[[ -z ${fpath[(re)$ZSH_CACHE_DIR/completions]} ]] && fpath=( "$ZSH_CACHE_DIR/completions" "${fpath[@]}" )
|
||
|
||
ZINIT[UPAR]=";:^[[A;:^[OA;:\\e[A;:\\eOA;:${termcap[ku]/$'\e'/^\[};:${terminfo[kcuu1]/$'\e'/^\[};:"
|
||
ZINIT[DOWNAR]=";:^[[B;:^[OB;:\\e[B;:\\eOB;:${termcap[kd]/$'\e'/^\[};:${terminfo[kcud1]/$'\e'/^\[};:"
|
||
ZINIT[RIGHTAR]=";:^[[C;:^[OC;:\\e[C;:\\eOC;:${termcap[kr]/$'\e'/^\[};:${terminfo[kcuf1]/$'\e'/^\[};:"
|
||
ZINIT[LEFTAR]=";:^[[D;:^[OD;:\\e[D;:\\eOD;:${termcap[kl]/$'\e'/^\[};:${terminfo[kcub1]/$'\e'/^\[};:"
|
||
|
||
builtin autoload -Uz is-at-least
|
||
is-at-least 5.1 && ZINIT[NEW_AUTOLOAD]=1 || ZINIT[NEW_AUTOLOAD]=0
|
||
#is-at-least 5.4 && ZINIT[NEW_AUTOLOAD]=2
|
||
|
||
# Parameters [[[
|
||
# temporary substituting of functions
|
||
ZINIT[TMP_SUBST]=inactive ZINIT[DTRACE]=0 ZINIT[CUR_PLUGIN]=
|
||
|
||
# ice
|
||
declare -gA ZINIT_1MAP ZINIT_2MAP
|
||
ZINIT_1MAP=(
|
||
OMZ:: https://github.com/ohmyzsh/ohmyzsh/trunk/
|
||
OMZP:: https://github.com/ohmyzsh/ohmyzsh/trunk/plugins/
|
||
OMZT:: https://github.com/ohmyzsh/ohmyzsh/trunk/themes/
|
||
OMZL:: https://github.com/ohmyzsh/ohmyzsh/trunk/lib/
|
||
PZT:: https://github.com/sorin-ionescu/prezto/trunk/
|
||
PZTM:: https://github.com/sorin-ionescu/prezto/trunk/modules/
|
||
)
|
||
ZINIT_2MAP=(
|
||
OMZ:: https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/
|
||
OMZP:: https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/plugins/
|
||
OMZT:: https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/themes/
|
||
OMZL:: https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/lib/
|
||
PZT:: https://raw.githubusercontent.com/sorin-ionescu/prezto/master/
|
||
PZTM:: https://raw.githubusercontent.com/sorin-ionescu/prezto/master/modules/
|
||
)
|
||
# ]]]
|
||
|
||
# Init [[[
|
||
zmodload zsh/zutil || { builtin print -P "%F{196}zsh/zutil module is required, aborting Zinit set up.%f"; return 1; }
|
||
zmodload zsh/parameter || { builtin print -P "%F{196}zsh/parameter module is required, aborting Zinit set up.%f"; return 1; }
|
||
zmodload zsh/term{cap,info} 2>/dev/null
|
||
autoload -Uz colors && colors
|
||
|
||
if [[ -z $SOURCED && ( ${+terminfo} -eq 1 && -n ${terminfo[colors]} ) || ( ${+termcap} -eq 1 && -n ${termcap[Co]} ) ]]; then
|
||
ZINIT+=(
|
||
col-annex $'\e[38;5;153m' col-faint $'\e[38;5;238m' col-msg2 $'\e[38;5;172m' col-quo $'\e[1;38;5;33m'
|
||
col-apo $'\e[1;38;5;45m' col-file $'\e[3;38;5;117m' col-msg3 $'\e[38;5;238m' col-quos $'\e[1;38;5;160m'
|
||
col-aps $'\e[38;5;117m' col-flag $'\e[1;3;38;5;79m' col-nb $'\e[22m' col-rst $'\e[0m'
|
||
col-b $'\e[1m' col-func $'\e[38;5;219m' col-nit $'\e[23m' col-slight $'\e[38;5;230m'
|
||
col-b-lhi $'\e[1m\e[38;5;75m' col-glob $'\e[38;5;227m' col-nl $'\n' col-st $'\e[9m'
|
||
col-b-warn $'\e[1;38;5;214m' col-happy $'\e[1m\e[38;5;82m' col-note $'\e[38;5;148m' col-tab $' \t '
|
||
col-bapo $'\e[1;38;5;220m' col-hi $'\e[1m\e[38;5;183m' col-nst $'\e[29m' col-term $'\e[38;5;185m'
|
||
col-baps $'\e[1;38;5;82m' col-ice $'\e[38;5;39m' col-nu $'\e[24m' col-th-bar $'\e[38;5;82m'
|
||
col-bar $'\e[38;5;82m' col-id-as $'\e[4;38;5;220m' col-num $'\e[3;38;5;155m' col-time $'\e[38;5;220m'
|
||
col-bcmd $'\e[38;5;220m' col-info $'\e[38;5;82m' col-obj $'\e[38;5;218m' col-txt $'\e[38;5;254m'
|
||
col-bspc $'\b' col-info2 $'\e[38;5;227m' col-obj2 $'\e[38;5;118m' col-u $'\e[4m'
|
||
col-cmd $'\e[38;5;82m' col-info3 $'\e[1m\e[38;5;227m' col-ok $'\e[38;5;220m' col-u-warn $'\e[4;38;5;214m'
|
||
col-data $'\e[38;5;82m' col-it $'\e[3m' col-opt $'\e[38;5;219m' col-uname $'\e[1;4m\e[35m'
|
||
col-data2 $'\e[38;5;117m' col-keyword $'\e[32m' col-p $'\e[38;5;81m' col-uninst $'\e[38;5;118m'
|
||
col-dir $'\e[3;38;5;153m' col-lhi $'\e[38;5;81m' col-pkg $'\e[1;3;38;5;27m' col-url $'\e[38;5;75m'
|
||
col-ehi $'\e[1m\e[38;5;210m' col-meta $'\e[38;5;57m' col-pname $'\e[1;4m\e[32m' col-var $'\e[38;5;81m'
|
||
col-error $'\e[1m\e[38;5;204m' col-meta2 $'\e[38;5;147m' col-pre $'\e[38;5;135m' col-version $'\e[3;38;5;87m'
|
||
col-failure $'\e[38;5;204m' col-msg $'\e[0m' col-profile $'\e[38;5;148m' col-warn $'\e[38;5;214m'
|
||
|
||
col-dbg $'\e[2m\e[38;47;107m'"[debug]"$'\e[0m'
|
||
col-e $'\e[1m\e[38;5;204m'"Error"$'\e[0m'":"
|
||
col-i $'\e[1m\e[38;5;82m'"==>"$'\e[0m'
|
||
col-m $'\e[38;5;4m'"==>"$'\e[0m'
|
||
col-w $'\e[1m\e[38;5;214m'"Warning"$'\e[0m'":"
|
||
|
||
col--… "${${${(M)LANG:#*UTF-8*}:+⋯⋯}:-···}" col-lr "${${${(M)LANG:#*UTF-8*}:+↔}:-"«-»"}"
|
||
col-ndsh "${${${(M)LANG:#*UTF-8*}:+–}:-}" col-… "${${${(M)LANG:#*UTF-8*}:+…}:-...}"
|
||
|
||
col-mdsh $'\e[1;38;5;220m'"${${${(M)LANG:#*UTF-8*}:+–}:--}"$'\e[0m'
|
||
col-mmdsh $'\e[1;38;5;220m'"${${${(M)LANG:#*UTF-8*}:+――}:--}"$'\e[0m'
|
||
|
||
col-↔ ${${${(M)LANG:#*UTF-8*}:+$'\e[38;5;82m↔\e[0m'}:-$'\e[38;5;82m«-»\e[0m'}
|
||
)
|
||
if [[ ( ${+terminfo} -eq 1 && ${terminfo[colors]} -ge 256 ) || ( ${+termcap} -eq 1 && ${termcap[Co]} -ge 256 ) ]]; then
|
||
ZINIT+=( col-pname $'\e[1;4m\e[38;5;39m' col-uname $'\e[1;4m\e[38;5;207m' )
|
||
fi
|
||
fi
|
||
|
||
# Hooks
|
||
typeset -gAH ZINIT_ZLE_HOOKS_LIST
|
||
ZINIT_ZLE_HOOKS_LIST=(
|
||
zle-isearch-exit 1
|
||
zle-isearch-update 1
|
||
zle-line-pre-redraw 1
|
||
zle-line-init 1
|
||
zle-line-finish 1
|
||
zle-history-line-set 1
|
||
zle-keymap-select 1
|
||
paste-insert 1
|
||
)
|
||
builtin setopt noaliases
|
||
# ]]]
|
||
|
||
#
|
||
# Temporary substituting of functions-related functions.
|
||
#
|
||
|
||
# FUNCTION: :zinit-reload-and-run [[[
|
||
# Marks given function ($3) for autoloading, and executes it triggering the
|
||
# load. $1 is the fpath dedicated to the function, $2 are autoload options.
|
||
# This function replaces "autoload -X", because using that on older Zsh
|
||
# versions causes problems with traps.
|
||
#
|
||
# So basically one creates function stub that calls :zinit-reload-and-run()
|
||
# instead of "autoload -X".
|
||
#
|
||
# Author: Bart Schaefer
|
||
#
|
||
# $1 - FPATH dedicated to function
|
||
# $2 - autoload options
|
||
# $3 - function name (one that needs autoloading)
|
||
:zinit-reload-and-run() {
|
||
local fpath_prefix="$1" autoload_opts="$2" func="$3"
|
||
shift 3
|
||
|
||
# Unfunction caller function (its name is given).
|
||
unfunction -- "$func"
|
||
|
||
local -a ___fpath
|
||
___fpath=( ${fpath[@]} )
|
||
local -a +h fpath
|
||
# See #127.
|
||
[[ $FPATH != *${${(@0)fpath_prefix}[1]}* ]] && \
|
||
fpath=( ${(@0)fpath_prefix} ${___fpath[@]} )
|
||
|
||
# After this the function exists again.
|
||
builtin autoload ${(s: :)autoload_opts} -- "$func"
|
||
|
||
# User wanted to call the function, not only load it.
|
||
"$func" "$@"
|
||
} # ]]]
|
||
# FUNCTION: :zinit-tmp-subst-autoload [[[
|
||
# Hijack plugin's calls to the 'autoload' builtin.
|
||
#
|
||
# The hijacking gathers report data and runs custom `autoload' function, that doesn't need FPATH.
|
||
:zinit-tmp-subst-autoload() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob warncreateglobal typesetsilent rcquotes
|
||
local -a opts opts2 custom reply
|
||
local func
|
||
|
||
zparseopts -D -E -M -a opts ${(s::):-RTUXdkmrtWzwC} I+=opts2 S+:=custom
|
||
|
||
builtin set -- ${@:#--}
|
||
|
||
# Process the id-as''/teleid'' to get the plugin dir.
|
||
.zinit-any-to-user-plugin $ZINIT[CUR_USPL2]
|
||
[[ $reply[1] = % ]] && \
|
||
local PLUGIN_DIR="$reply[2]" || \
|
||
local PLUGIN_DIR="$ZINIT[PLUGINS_DIR]/${reply[1]:+$reply[1]---}${reply[2]//\//---}"
|
||
|
||
|
||
# "fpath elements" ---- those elements that lie inside the plug directory.
|
||
local -a fpath_elements
|
||
fpath_elements=( ${fpath[(r)$PLUGIN_DIR/*]} )
|
||
|
||
# Add a function subdirectory to items, if any (this action is
|
||
# according to the Plug Standard version 1.07 and later).
|
||
[[ -d $PLUGIN_DIR/functions ]] && fpath_elements+=( "$PLUGIN_DIR"/functions )
|
||
|
||
if (( ${+opts[(r)-X]} )); then
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Warning: Failed autoload ${(j: :)opts[@]} $*"
|
||
+zi-log -u2 "{error}builtin autoload required for {obj}${(j: :)opts[@]}{error} option(s)"
|
||
return 1
|
||
fi
|
||
if (( ${+opts[(r)-w]} )); then
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "-w-Autoload ${(j: :)opts[@]} ${(j: :)@}"
|
||
fpath+=( $PLUGIN_DIR )
|
||
builtin autoload ${opts[@]} "$@"
|
||
return $?
|
||
fi
|
||
if [[ -n ${(M)@:#+X} ]]; then
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Autoload +X ${opts:+${(j: :)opts[@]} }${(j: :)${@:#+X}}"
|
||
local +h FPATH=$PLUGINS_DIR${fpath_elements:+:${(j.:.)fpath_elements[@]}}:$FPATH
|
||
local +h -a fpath
|
||
fpath=( $PLUGIN_DIR $fpath_elements $fpath )
|
||
builtin autoload +X ${opts[@]} "${@:#+X}"
|
||
return $?
|
||
fi
|
||
|
||
for func; do
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Autoload $func${opts:+ with options ${(j: :)opts[@]}}"
|
||
done
|
||
|
||
integer count retval
|
||
for func; do
|
||
# Real autoload doesn't touch function if it already exists.
|
||
# Author of the idea of FPATH-clean autoloading: Bart Schaefer.
|
||
if (( ${+functions[$func]} != 1 )) {
|
||
builtin setopt noaliases
|
||
if [[ $func == /* ]] && is-at-least 5.4; then
|
||
builtin autoload ${opts[@]} $func
|
||
return $?
|
||
elif [[ $func == /* ]]; then
|
||
if [[ $ZINIT[MUTE_WARNINGS] != (1|true|on|yes) && \
|
||
-z $ZINIT[WARN_SHOWN_FOR_$ZINIT[CUR_USPL2]] ]]; then
|
||
+zi-log "{u-warn}Warning{b-warn}: {rst}the plugin {pid}$ZINIT[CUR_USPL2]" \
|
||
"{rst}is using autoload functions specified by their absolute path," \
|
||
"which is not supported by this Zsh version ({↔} {version}$ZSH_VERSION{rst}," \
|
||
"required is Zsh >= {version}5.4{rst})." \
|
||
"{nl}A fallback mechanism has been applied, which works well only" \
|
||
"for functions in the plugin {u}{slight}main{rst} directory." \
|
||
"{nl}(To mute this message, set" \
|
||
"{var}\$ZINIT[MUTE_WARNINGS]{rst} to a truth value.)"
|
||
ZINIT[WARN_SHOWN_FOR_$ZINIT[CUR_USPL2]]=1
|
||
fi
|
||
|
||
# Workaround
|
||
func=$func:t
|
||
fi
|
||
if [[ ${ZINIT[NEW_AUTOLOAD]} = 2 ]]; then
|
||
builtin autoload ${opts[@]} "$PLUGIN_DIR/$func"
|
||
retval=$?
|
||
elif [[ ${ZINIT[NEW_AUTOLOAD]} = 1 ]]; then
|
||
if (( ${+opts[(r)-C]} )) {
|
||
local pth nl=$'\n' sel=""
|
||
for pth ( $PLUGIN_DIR $fpath_elements $fpath ) {
|
||
[[ -f $pth/$func ]] && { sel=$pth; break; }
|
||
}
|
||
if [[ -z $sel ]] {
|
||
+zi-log '{u-warn}zinit{b-warn}:{error} Could not find autoload function{ehi}:' \
|
||
"{apo}\`{file}${func}{apo}\`{error} anywhere in {var}\$fpath{error}."
|
||
retval=1
|
||
} else {
|
||
eval "function ${(q)${custom[++count*2]}:-$func} {
|
||
local body=\"\$(<${(qqq)sel}/${(qqq)func})\" body2
|
||
() { setopt localoptions extendedglob
|
||
body2=\"\${body##[[:space:]]#${func}[[:blank:]]#\(\)[[:space:]]#\{}\"
|
||
[[ \$body2 != \$body ]] && \
|
||
body2=\"\${body2%\}[[:space:]]#([$nl]#([[:blank:]]#\#[^$nl]#((#e)|[$nl]))#)#}\"
|
||
}
|
||
|
||
functions[${${(q)custom[count*2]}:-$func}]=\"\$body2\"
|
||
${(q)${custom[count*2]}:-$func} \"\$@\"
|
||
}"
|
||
retval=$?
|
||
}
|
||
} else {
|
||
functions[$func]="
|
||
local -a fpath
|
||
fpath=( ${(qqq)PLUGIN_DIR} ${(qqq@)fpath_elements} ${(qqq@)fpath} )
|
||
builtin autoload -X ${(j: :)${(q-)opts[@]}}
|
||
"
|
||
retval=$?
|
||
}
|
||
else
|
||
eval "function ${(q)func} {
|
||
:zinit-reload-and-run ${(qqq)PLUGIN_DIR}"$'\0'"${(pj,\0,)${(qqq)fpath_elements[@]}} ${(qq)opts[*]} ${(q)func} "'"$@"
|
||
}'
|
||
retval=$?
|
||
fi
|
||
(( ZINIT[ALIASES_OPT] )) && builtin setopt aliases
|
||
}
|
||
if (( ${+opts2[(r)-I]} )) {
|
||
${custom[count*2]:-$func}
|
||
retval=$?
|
||
}
|
||
done
|
||
|
||
return $retval
|
||
} # ]]]
|
||
# FUNCTION: :zinit-tmp-subst-bindkey [[[
|
||
# Function defined to hijack plugin's calls to the `bindkey' builtin.
|
||
#
|
||
# The hijacking is to gather report data (which is used in unload).
|
||
:zinit-tmp-subst-bindkey() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob warncreateglobal typesetsilent noshortloops
|
||
|
||
is-at-least 5.3 && \
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Bindkey ${(j: :)${(q+)@}}" || \
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Bindkey ${(j: :)${(q)@}}"
|
||
|
||
# Remember to perform the actual bindkey call.
|
||
typeset -a pos
|
||
pos=( "$@" )
|
||
|
||
# Check if we have regular bindkey call, i.e.
|
||
# with no options or with -s, plus possible -M
|
||
# option.
|
||
local -A opts
|
||
zparseopts -A opts -D ${(s::):-lLdDAmrsevaR} M: N:
|
||
|
||
if (( ${#opts} == 0 ||
|
||
( ${#opts} == 1 && ${+opts[-M]} ) ||
|
||
( ${#opts} == 1 && ${+opts[-R]} ) ||
|
||
( ${#opts} == 1 && ${+opts[-s]} ) ||
|
||
( ${#opts} <= 2 && ${+opts[-M]} && ${+opts[-s]} ) ||
|
||
( ${#opts} <= 2 && ${+opts[-M]} && ${+opts[-R]} )
|
||
)); then
|
||
local string="${(q)1}" widget="${(q)2}"
|
||
local quoted
|
||
|
||
if [[ -n ${ICE[bindmap]} && ${ZINIT_CUR_BIND_MAP[empty]} -eq 1 ]]; then
|
||
local -a pairs
|
||
pairs=( "${(@s,;,)ICE[bindmap]}" )
|
||
if [[ -n ${(M)pairs:#*\\(#e)} ]] {
|
||
local prev
|
||
pairs=( ${pairs[@]//(#b)((*)\\(#e)|(*))/${match[3]:+${prev:+$prev\;}}${match[3]}${${prev::=${match[2]:+${prev:+$prev\;}}${match[2]}}:+}} )
|
||
}
|
||
pairs=( "${(@)${(@)${(@s:->:)pairs}##[[:space:]]##}%%[[:space:]]##}" )
|
||
ZINIT_CUR_BIND_MAP=( empty 0 )
|
||
(( ${#pairs} > 1 && ${#pairs[@]} % 2 == 0 )) && ZINIT_CUR_BIND_MAP+=( "${pairs[@]}" )
|
||
fi
|
||
|
||
local bmap_val="${ZINIT_CUR_BIND_MAP[${1}]}"
|
||
if (( !ZINIT_CUR_BIND_MAP[empty] )) {
|
||
[[ -z $bmap_val ]] && bmap_val="${ZINIT_CUR_BIND_MAP[${(qqq)1}]}"
|
||
[[ -z $bmap_val ]] && bmap_val="${ZINIT_CUR_BIND_MAP[${(qqq)${(Q)1}}]}"
|
||
[[ -z $bmap_val ]] && { bmap_val="${ZINIT_CUR_BIND_MAP[!${(qqq)1}]}"; integer val=1; }
|
||
[[ -z $bmap_val ]] && bmap_val="${ZINIT_CUR_BIND_MAP[!${(qqq)${(Q)1}}]}"
|
||
}
|
||
if [[ -n $bmap_val ]]; then
|
||
string="${(q)bmap_val}"
|
||
if (( val )) {
|
||
[[ ${pos[1]} = "-M" ]] && pos[4]="$bmap_val" || pos[2]="$bmap_val"
|
||
} else {
|
||
[[ ${pos[1]} = "-M" ]] && pos[3]="${(Q)bmap_val}" || pos[1]="${(Q)bmap_val}"
|
||
}
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" ":::Bindkey: combination <$1> changed to <$bmap_val>${${(M)bmap_val:#hold}:+, i.e. ${ZINIT[col-error]}unmapped${ZINIT[col-rst]}}"
|
||
((1))
|
||
elif [[ ( -n ${bmap_val::=${ZINIT_CUR_BIND_MAP[UPAR]}} && -n ${${ZINIT[UPAR]}[(r);:${(q)1};:]} ) || \
|
||
( -n ${bmap_val::=${ZINIT_CUR_BIND_MAP[DOWNAR]}} && -n ${${ZINIT[DOWNAR]}[(r);:${(q)1};:]} ) || \
|
||
( -n ${bmap_val::=${ZINIT_CUR_BIND_MAP[RIGHTAR]}} && -n ${${ZINIT[RIGHTAR]}[(r);:${(q)1};:]} ) || \
|
||
( -n ${bmap_val::=${ZINIT_CUR_BIND_MAP[LEFTAR]}} && -n ${${ZINIT[LEFTAR]}[(r);:${(q)1};:]} )
|
||
]]; then
|
||
string="${(q)bmap_val}"
|
||
if (( val )) {
|
||
[[ ${pos[1]} = "-M" ]] && pos[4]="$bmap_val" || pos[2]="$bmap_val"
|
||
} else {
|
||
[[ ${pos[1]} = "-M" ]] && pos[3]="${(Q)bmap_val}" || pos[1]="${(Q)bmap_val}"
|
||
}
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" ":::Bindkey: combination <$1> recognized as cursor-key and changed to <${bmap_val}>${${(M)bmap_val:#hold}:+, i.e. ${ZINIT[col-error]}unmapped${ZINIT[col-rst]}}"
|
||
fi
|
||
[[ $bmap_val = hold ]] && return 0
|
||
|
||
local prev="${(q)${(s: :)$(builtin bindkey ${(Q)string})}[-1]#undefined-key}"
|
||
|
||
# "-M map" given?
|
||
if (( ${+opts[-M]} )); then
|
||
local Mopt=-M
|
||
local Marg="${opts[-M]}"
|
||
|
||
Mopt="${(q)Mopt}"
|
||
Marg="${(q)Marg}"
|
||
|
||
quoted="$string $widget $prev $Mopt $Marg"
|
||
else
|
||
quoted="$string $widget $prev"
|
||
fi
|
||
|
||
# -R given?
|
||
if (( ${+opts[-R]} )); then
|
||
local Ropt=-R
|
||
Ropt="${(q)Ropt}"
|
||
|
||
if (( ${+opts[-M]} )); then
|
||
quoted="$quoted $Ropt"
|
||
else
|
||
# Two empty fields for non-existent -M arg.
|
||
local space=_
|
||
space="${(q)space}"
|
||
quoted="$quoted $space $space $Ropt"
|
||
fi
|
||
fi
|
||
|
||
quoted="${(q)quoted}"
|
||
|
||
# Remember the bindkey, only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[BINDKEYS__${ZINIT[CUR_USPL2]}]+="$quoted "
|
||
# Remember for dtrace.
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[BINDKEYS___dtrace/_dtrace]+="$quoted "
|
||
else
|
||
# bindkey -A newkeymap main?
|
||
# Negative indices for KSH_ARRAYS immunity.
|
||
if [[ ${#opts} -eq 1 && ${+opts[-A]} = 1 && ${#pos} = 3 && ${pos[-1]} = main && ${pos[-2]} != -A ]]; then
|
||
# Save a copy of main keymap.
|
||
(( ZINIT[BINDKEY_MAIN_IDX] = ${ZINIT[BINDKEY_MAIN_IDX]:-0} + 1 ))
|
||
local pname="${ZINIT[CUR_PLUGIN]:-_dtrace}"
|
||
local name="${(q)pname}-main-${ZINIT[BINDKEY_MAIN_IDX]}"
|
||
builtin bindkey -N "$name" main
|
||
|
||
# Remember occurence of main keymap substitution, to revert on unload.
|
||
local keys=_ widget=_ prev= optA=-A mapname="${name}" optR=_
|
||
local quoted="${(q)keys} ${(q)widget} ${(q)prev} ${(q)optA} ${(q)mapname} ${(q)optR}"
|
||
quoted="${(q)quoted}"
|
||
|
||
# Remember the bindkey, only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[BINDKEYS__${ZINIT[CUR_USPL2]}]+="$quoted "
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[BINDKEYS___dtrace/_dtrace]+="$quoted "
|
||
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Warning: keymap \`main' copied to \`${name}' because of \`${pos[-2]}' substitution"
|
||
# bindkey -N newkeymap [other].
|
||
elif [[ ${#opts} -eq 1 && ${+opts[-N]} = 1 ]]; then
|
||
local Nopt=-N
|
||
local Narg="${opts[-N]}"
|
||
|
||
local keys=_ widget=_ prev= optN=-N mapname="${Narg}" optR=_
|
||
local quoted="${(q)keys} ${(q)widget} ${(q)prev} ${(q)optN} ${(q)mapname} ${(q)optR}"
|
||
quoted="${(q)quoted}"
|
||
|
||
# Remember the bindkey, only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[BINDKEYS__${ZINIT[CUR_USPL2]}]+="$quoted "
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[BINDKEYS___dtrace/_dtrace]+="$quoted "
|
||
else
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Warning: last bindkey used non-typical options: ${(kv)opts[*]}"
|
||
fi
|
||
fi
|
||
|
||
# Actual bindkey.
|
||
builtin bindkey "${pos[@]}"
|
||
return $? # testable
|
||
} # ]]]
|
||
# FUNCTION: :zinit-tmp-subst-zstyle [[[
|
||
# Function defined to hijack plugin's calls to the `zstyle' builtin.
|
||
#
|
||
# The hijacking is to gather report data (which is used in unload).
|
||
:zinit-tmp-subst-zstyle() {
|
||
builtin setopt localoptions noerrreturn noerrexit extendedglob nowarncreateglobal \
|
||
typesetsilent noshortloops unset
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Zstyle $*"
|
||
|
||
# Remember in order to perform the actual zstyle call.
|
||
typeset -a pos
|
||
pos=( "$@" )
|
||
|
||
# Check if we have regular zstyle call, i.e.
|
||
# with no options or with -e.
|
||
local -a opts
|
||
zparseopts -a opts -D ${(s::):-eLdgabsTtm}
|
||
|
||
if [[ ${#opts} -eq 0 || ( ${#opts} -eq 1 && ${+opts[(r)-e]} = 1 ) ]]; then
|
||
# Have to quote $1, then $2, then concatenate them, then quote them again.
|
||
local pattern="${(q)1}" style="${(q)2}"
|
||
local ps="$pattern $style"
|
||
ps="${(q)ps}"
|
||
|
||
# Remember the zstyle, only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[ZSTYLES__${ZINIT[CUR_USPL2]}]+="$ps "
|
||
# Remember for dtrace.
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[ZSTYLES___dtrace/_dtrace]+=$ps
|
||
else
|
||
if [[ ! ${#opts[@]} = 1 && ( ${+opts[(r)-s]} = 1 || ${+opts[(r)-b]} = 1 || ${+opts[(r)-a]} = 1 ||
|
||
${+opts[(r)-t]} = 1 || ${+opts[(r)-T]} = 1 || ${+opts[(r)-m]} = 1 )
|
||
]]; then
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Warning: last zstyle used non-typical options: ${opts[*]}"
|
||
fi
|
||
fi
|
||
|
||
# Actual zstyle.
|
||
builtin zstyle "${pos[@]}"
|
||
return $? # testable
|
||
} # ]]]
|
||
# FUNCTION: :zinit-tmp-subst-alias [[[
|
||
# Function defined to hijack plugin's calls to the `alias' builtin.
|
||
#
|
||
# The hijacking is to gather report data (which is used in unload).
|
||
:zinit-tmp-subst-alias() {
|
||
builtin setopt localoptions noerrreturn noerrexit extendedglob warncreateglobal \
|
||
typesetsilent noshortloops unset
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Alias $*"
|
||
|
||
# Remember to perform the actual alias call.
|
||
typeset -a pos
|
||
pos=( "$@" )
|
||
|
||
local -a opts
|
||
zparseopts -a opts -D ${(s::):-gs}
|
||
|
||
local a quoted tmp
|
||
for a in "$@"; do
|
||
local aname="${a%%[=]*}"
|
||
local avalue="${a#*=}"
|
||
|
||
# Check if alias is to be redefined.
|
||
(( ${+aliases[$aname]} )) && .zinit-add-report "${ZINIT[CUR_USPL2]}" "Warning: redefining alias \`${aname}', previous value: ${aliases[$aname]}"
|
||
|
||
local bname=${(q)aliases[$aname]}
|
||
aname="${(q)aname}"
|
||
|
||
if (( ${+opts[(r)-s]} )); then
|
||
tmp=-s
|
||
tmp="${(q)tmp}"
|
||
quoted="$aname $bname $tmp"
|
||
elif (( ${+opts[(r)-g]} )); then
|
||
tmp=-g
|
||
tmp="${(q)tmp}"
|
||
quoted="$aname $bname $tmp"
|
||
else
|
||
quoted="$aname $bname"
|
||
fi
|
||
|
||
quoted="${(q)quoted}"
|
||
|
||
# Remember the alias, only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[ALIASES__${ZINIT[CUR_USPL2]}]+="$quoted "
|
||
# Remember for dtrace.
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[ALIASES___dtrace/_dtrace]+="$quoted "
|
||
done
|
||
|
||
# Actual alias.
|
||
builtin alias "${pos[@]}"
|
||
return $? # testable
|
||
} # ]]]
|
||
# FUNCTION: :zinit-tmp-subst-zle [[[.
|
||
# Function defined to hijack plugin's calls to the `zle' builtin.
|
||
#
|
||
# The hijacking is to gather report data (which is used in unload).
|
||
:zinit-tmp-subst-zle() {
|
||
builtin setopt localoptions noerrreturn noerrexit extendedglob warncreateglobal \
|
||
typesetsilent noshortloops unset
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Zle $*"
|
||
|
||
# Remember to perform the actual zle call.
|
||
typeset -a pos
|
||
pos=( "$@" )
|
||
|
||
builtin set -- "${@:#--}"
|
||
|
||
# Try to catch game-changing "-N".
|
||
if [[ ( $1 = -N && ( $# = 2 || $# = 3 ) ) || ( $1 = -C && $# = 4 ) ]]; then
|
||
# Hooks.
|
||
if [[ ${ZINIT_ZLE_HOOKS_LIST[$2]} = 1 ]]; then
|
||
local quoted="$2"
|
||
quoted="${(q)quoted}"
|
||
# Remember only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[WIDGETS_DELETE__${ZINIT[CUR_USPL2]}]+="$quoted "
|
||
# Remember for dtrace.
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[WIDGETS_DELETE___dtrace/_dtrace]+="$quoted "
|
||
# These will be saved and restored.
|
||
elif (( ${+widgets[$2]} )); then
|
||
# Have to remember original widget "$2" and
|
||
# the copy that it's going to be done.
|
||
local widname="$2" targetfun="${${${(M)1:#-C}:+$4}:-$3}"
|
||
local completion_widget="${${(M)1:#-C}:+$3}"
|
||
local saved_widcontents="${widgets[$widname]}"
|
||
|
||
widname="${(q)widname}"
|
||
completion_widget="${(q)completion_widget}"
|
||
targetfun="${(q)targetfun}"
|
||
saved_widcontents="${(q)saved_widcontents}"
|
||
local quoted="$1 $widname $completion_widget $targetfun $saved_widcontents"
|
||
quoted="${(q)quoted}"
|
||
# Remember only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[WIDGETS_SAVED__${ZINIT[CUR_USPL2]}]+="$quoted "
|
||
# Remember for dtrace.
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[WIDGETS_SAVED___dtrace/_dtrace]+="$quoted "
|
||
# These will be deleted.
|
||
else
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Note: a new widget created via zle -N: \`$2'"
|
||
local quoted="$2"
|
||
quoted="${(q)quoted}"
|
||
# Remember only when load is in progress (it can be dstart that leads execution here).
|
||
[[ -n ${ZINIT[CUR_USPL2]} ]] && ZINIT[WIDGETS_DELETE__${ZINIT[CUR_USPL2]}]+="$quoted "
|
||
# Remember for dtrace.
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && ZINIT[WIDGETS_DELETE___dtrace/_dtrace]+="$quoted "
|
||
fi
|
||
fi
|
||
|
||
# Actual zle.
|
||
builtin zle "${pos[@]}"
|
||
return $? # testable
|
||
} # ]]]
|
||
# FUNCTION: :zinit-tmp-subst-compdef [[[
|
||
# Function defined to hijack plugin's calls to the `compdef' function.
|
||
# The hijacking is not only for reporting, but also to save compdef
|
||
# calls so that `compinit' can be called after loading plugins.
|
||
:zinit-tmp-subst-compdef() {
|
||
builtin setopt localoptions noerrreturn noerrexit extendedglob warncreateglobal \
|
||
typesetsilent noshortloops unset
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Saving \`compdef $*' for replay"
|
||
ZINIT_COMPDEF_REPLAY+=( "${(j: :)${(q)@}}" )
|
||
|
||
return 0 # testable
|
||
} # ]]]
|
||
# FUNCTION: .zinit-tmp-subst-on [[[
|
||
# Turn on temporary substituting of functions of builtins and functions according to passed
|
||
# mode ("load", "light", "light-b" or "compdef"). The temporary substituting of functions is
|
||
# to gather report data, and to hijack 'autoload', 'bindkey' and 'compdef' calls.
|
||
.zinit-tmp-subst-on() {
|
||
local mode="$1"
|
||
|
||
# Enable temporary substituting of functions only once.
|
||
#
|
||
# One could expect possibility of widening of temporary substituting of functions, however
|
||
# such sequence doesn't exist, e.g. "light" then "load"/"dtrace", "compdef" then "load"/
|
||
# "dtrace", "light" then "compdef", "compdef" then "light".
|
||
#
|
||
# It is always "dtrace" then "load" (i.e. dtrace then load) "dtrace" then "light" (i.e.:
|
||
# dtrace then light load) "dtrace" then "compdef" (i.e.: dtrace then snippet).
|
||
[[ ${ZINIT[TMP_SUBST]} != inactive ]] && builtin return 0
|
||
|
||
ZINIT[TMP_SUBST]="$mode"
|
||
|
||
# The point about backuping is: does the key exist in functions array.
|
||
# If it does exist, then it will also exist as ZINIT[bkp-*].
|
||
|
||
# Defensive code, shouldn't be needed.
|
||
builtin unset "ZINIT[bkp-autoload]" "ZINIT[bkp-compdef]" # 0, E.
|
||
|
||
if [[ $mode != compdef ]]; then
|
||
# 0. Used, but not in temporary restoration, which doesn't happen for autoload.
|
||
(( ${+functions[autoload]} )) && ZINIT[bkp-autoload]="${functions[autoload]}"
|
||
functions[autoload]=':zinit-tmp-subst-autoload "$@";'
|
||
fi
|
||
|
||
# E. Always shade compdef.
|
||
(( ${+functions[compdef]} )) && ZINIT[bkp-compdef]="${functions[compdef]}"
|
||
functions[compdef]=':zinit-tmp-subst-compdef "$@";'
|
||
|
||
# Temporarily replace `source' if subst'' given.
|
||
if [[ -n ${ICE[subst]} ]] {
|
||
(( ${+functions[source]} )) && ZINIT[bkp-source]="${functions[source]}"
|
||
(( ${+functions[.]} )) && ZINIT[bkp-.]="${functions[.]}"
|
||
(( ${+functions[.zinit-service]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-additional.zsh"
|
||
functions[source]=':zinit-tmp-subst-source "$@";'
|
||
functions[.]=':zinit-tmp-subst-source "$@";'
|
||
}
|
||
|
||
# Light and compdef temporary substituting of functions stops here. Dtrace and load go on.
|
||
[[ ( $mode = light && ${+ICE[trackbinds]} -eq 0 ) || $mode = compdef ]] && return 0
|
||
|
||
# Defensive code, shouldn't be needed. A, B, C, D.
|
||
builtin unset "ZINIT[bkp-bindkey]" "ZINIT[bkp-zstyle]" "ZINIT[bkp-alias]" "ZINIT[bkp-zle]"
|
||
|
||
# A.
|
||
(( ${+functions[bindkey]} )) && ZINIT[bkp-bindkey]="${functions[bindkey]}"
|
||
functions[bindkey]=':zinit-tmp-subst-bindkey "$@";'
|
||
|
||
# B, when `zinit light -b ...' or when `zinit ice trackbinds ...; zinit light ...'.
|
||
[[ $mode = light-b || ( $mode = light && ${+ICE[trackbinds]} -eq 1 ) ]] && return 0
|
||
|
||
# B.
|
||
(( ${+functions[zstyle]} )) && ZINIT[bkp-zstyle]="${functions[zstyle]}"
|
||
functions[zstyle]=':zinit-tmp-subst-zstyle "$@";'
|
||
|
||
# C.
|
||
(( ${+functions[alias]} )) && ZINIT[bkp-alias]="${functions[alias]}"
|
||
functions[alias]=':zinit-tmp-subst-alias "$@";'
|
||
|
||
# D.
|
||
(( ${+functions[zle]} )) && ZINIT[bkp-zle]="${functions[zle]}"
|
||
functions[zle]=':zinit-tmp-subst-zle "$@";'
|
||
|
||
builtin return 0
|
||
} # ]]]
|
||
# FUNCTION: .zinit-tmp-subst-off [[[
|
||
# Turn off temporary substituting of functions completely for a given mode ("load", "light",
|
||
# "light-b" (i.e. the `trackbinds' mode) or "compdef").
|
||
.zinit-tmp-subst-off() {
|
||
builtin setopt localoptions noerrreturn noerrexit extendedglob warncreateglobal \
|
||
typesetsilent noshortloops unset noaliases
|
||
local mode="$1"
|
||
|
||
# Disable temporary substituting of functions only once.
|
||
# Disable temporary substituting of functions only the way it was enabled first.
|
||
[[ ${ZINIT[TMP_SUBST]} = inactive || ${ZINIT[TMP_SUBST]} != $mode ]] && return 0
|
||
|
||
ZINIT[TMP_SUBST]=inactive
|
||
|
||
if [[ $mode != compdef ]]; then
|
||
# 0. Unfunction autoload.
|
||
(( ${+ZINIT[bkp-autoload]} )) && functions[autoload]="${ZINIT[bkp-autoload]}" || unfunction autoload
|
||
fi
|
||
|
||
# E. Restore original compdef if it existed.
|
||
(( ${+ZINIT[bkp-compdef]} )) && functions[compdef]="${ZINIT[bkp-compdef]}" || unfunction compdef
|
||
|
||
# Restore the possible source function.
|
||
(( ${+ZINIT[bkp-source]} )) && functions[source]="${ZINIT[bkp-source]}" || unfunction source 2>/dev/null
|
||
(( ${+ZINIT[bkp-.]} )) && functions[.]="${ZINIT[bkp-.]}" || unfunction . 2> /dev/null
|
||
|
||
# Light and compdef temporary substituting of functions stops here.
|
||
[[ ( $mode = light && ${+ICE[trackbinds]} -eq 0 ) || $mode = compdef ]] && return 0
|
||
|
||
# Unfunction temporary substituting of functions functions.
|
||
|
||
# A.
|
||
(( ${+ZINIT[bkp-bindkey]} )) && functions[bindkey]="${ZINIT[bkp-bindkey]}" || unfunction bindkey
|
||
|
||
# When `zinit light -b ...' or when `zinit ice trackbinds ...; zinit light ...'.
|
||
[[ $mode = light-b || ( $mode = light && ${+ICE[trackbinds]} -eq 1 ) ]] && return 0
|
||
|
||
# B.
|
||
(( ${+ZINIT[bkp-zstyle]} )) && functions[zstyle]="${ZINIT[bkp-zstyle]}" || unfunction zstyle
|
||
# C.
|
||
(( ${+ZINIT[bkp-alias]} )) && functions[alias]="${ZINIT[bkp-alias]}" || unfunction alias
|
||
# D.
|
||
(( ${+ZINIT[bkp-zle]} )) && functions[zle]="${ZINIT[bkp-zle]}" || unfunction zle
|
||
|
||
return 0
|
||
} # ]]]
|
||
# FUNCTION: pmodload [[[
|
||
# Compatibility with Prezto. Calls can be recursive
|
||
(( ${+functions[pmodload]} )) || pmodload() {
|
||
local -A ices
|
||
(( ${+ICE} )) && ices=( "${(kv)ICE[@]}" teleid '' )
|
||
local -A ICE ZINIT_ICE
|
||
ICE=( "${(kv)ices[@]}" ) ZINIT_ICE=( "${(kv)ices[@]}" )
|
||
while (( $# )); do
|
||
ICE[teleid]="PZT::modules/$1${ICE[svn]-/init.zsh}"
|
||
ZINIT_ICE[teleid]="PZT::modules/$1${ICE[svn]-/init.zsh}"
|
||
if zstyle -t ":prezto:module:$1" loaded 'yes' 'no'; then
|
||
shift
|
||
continue
|
||
else
|
||
[[ -z ${ZINIT_SNIPPETS[PZT::modules/$1${ICE[svn]-/init.zsh}]} && -z ${ZINIT_SNIPPETS[https://github.com/sorin-ionescu/prezto/trunk/modules/$1${ICE[svn]-/init.zsh}]} ]] && .zinit-load-snippet PZT::modules/"$1${ICE[svn]-/init.zsh}"
|
||
shift
|
||
fi
|
||
done
|
||
} # ]]]
|
||
|
||
#
|
||
# Diff functions.
|
||
#
|
||
|
||
# FUNCTION: .zinit-diff-functions [[[
|
||
# Implements detection of newly created functions. Performs
|
||
# data gathering, computation is done in *-compute().
|
||
#
|
||
# $1 - user/plugin (i.e. uspl2 format)
|
||
# $2 - command, can be "begin" or "end"
|
||
.zinit-diff-functions() {
|
||
local uspl2="$1"
|
||
local cmd="$2"
|
||
|
||
[[ $cmd = begin ]] && \
|
||
{ [[ -z ${ZINIT[FUNCTIONS_BEFORE__$uspl2]} ]] && \
|
||
ZINIT[FUNCTIONS_BEFORE__$uspl2]="${(j: :)${(qk)functions[@]}}"
|
||
} || \
|
||
ZINIT[FUNCTIONS_AFTER__$uspl2]+=" ${(j: :)${(qk)functions[@]}}"
|
||
} # ]]]
|
||
# FUNCTION: .zinit-diff-options [[[
|
||
# Implements detection of change in option state. Performs
|
||
# data gathering, computation is done in *-compute().
|
||
#
|
||
# $1 - user/plugin (i.e. uspl2 format)
|
||
# $2 - command, can be "begin" or "end"
|
||
.zinit-diff-options() {
|
||
local IFS=" "
|
||
|
||
[[ $2 = begin ]] && \
|
||
{ [[ -z ${ZINIT[OPTIONS_BEFORE__$uspl2]} ]] && \
|
||
ZINIT[OPTIONS_BEFORE__$1]="${(kv)options[@]}"
|
||
} || \
|
||
ZINIT[OPTIONS_AFTER__$1]+=" ${(kv)options[@]}"
|
||
} # ]]]
|
||
# FUNCTION: .zinit-diff-env [[[
|
||
# Implements detection of change in PATH and FPATH.
|
||
#
|
||
# $1 - user/plugin (i.e. uspl2 format)
|
||
# $2 - command, can be "begin" or "end"
|
||
.zinit-diff-env() {
|
||
typeset -a tmp
|
||
local IFS=" "
|
||
|
||
[[ $2 = begin ]] && {
|
||
{ [[ -z ${ZINIT[PATH_BEFORE__$uspl2]} ]] && \
|
||
tmp=( "${(q)path[@]}" )
|
||
ZINIT[PATH_BEFORE__$1]="${tmp[*]}"
|
||
}
|
||
{ [[ -z ${ZINIT[FPATH_BEFORE__$uspl2]} ]] && \
|
||
tmp=( "${(q)fpath[@]}" )
|
||
ZINIT[FPATH_BEFORE__$1]="${tmp[*]}"
|
||
}
|
||
} || {
|
||
tmp=( "${(q)path[@]}" )
|
||
ZINIT[PATH_AFTER__$1]+=" ${tmp[*]}"
|
||
tmp=( "${(q)fpath[@]}" )
|
||
ZINIT[FPATH_AFTER__$1]+=" ${tmp[*]}"
|
||
}
|
||
} # ]]]
|
||
# FUNCTION: .zinit-diff-parameter [[[
|
||
# Implements detection of change in any parameter's existence and type.
|
||
# Performs data gathering, computation is done in *-compute().
|
||
#
|
||
# $1 - user/plugin (i.e. uspl2 format)
|
||
# $2 - command, can be "begin" or "end"
|
||
.zinit-diff-parameter() {
|
||
typeset -a tmp
|
||
|
||
[[ $2 = begin ]] && {
|
||
{ [[ -z ${ZINIT[PARAMETERS_BEFORE__$uspl2]} ]] && \
|
||
ZINIT[PARAMETERS_BEFORE__$1]="${(j: :)${(qkv)parameters[@]}}"
|
||
}
|
||
} || {
|
||
ZINIT[PARAMETERS_AFTER__$1]+=" ${(j: :)${(qkv)parameters[@]}}"
|
||
}
|
||
} # ]]]
|
||
# FUNCTION: .zinit-diff [[[
|
||
# Performs diff actions of all types
|
||
.zinit-diff() {
|
||
.zinit-diff-functions "$1" "$2"
|
||
.zinit-diff-options "$1" "$2"
|
||
.zinit-diff-env "$1" "$2"
|
||
.zinit-diff-parameter "$1" "$2"
|
||
} # ]]]
|
||
|
||
#
|
||
# Utility functions.
|
||
#
|
||
|
||
# FUNCTION: .zinit-get-mtime-into [[[
|
||
.zinit-get-mtime-into() {
|
||
if (( ZINIT[HAVE_ZSTAT] )) {
|
||
local -a arr
|
||
{ zstat +mtime -A arr "$1"; } 2>/dev/null
|
||
: ${(P)2::="${arr[1]}"}
|
||
} else {
|
||
{ : ${(P)2::="$(stat -c %Y "$1")"}; } 2>/dev/null
|
||
}
|
||
} # ]]]
|
||
# FUNCTION: .zinit-cd-quiet [[[
|
||
# Changes directory without running chpwd hooks or touching the directory stack.
|
||
#
|
||
# $1 - directory to change into
|
||
.zinit-cd-quiet() {
|
||
() { setopt localoptions noautopushd; builtin cd -q "$1"; } "$1"
|
||
} # ]]]
|
||
# FUNCTION: .zinit-restore-dir [[[
|
||
# Returns to $1 without leaving the visited directory as the `cd -' target.
|
||
#
|
||
# The directory `cd -' goes to is tracked internally by zsh and is only updated
|
||
# by a real cd/pushd/popd, never by assigning to $OLDPWD. The only way to make
|
||
# `cd -' forget the directory we temporarily visited is to cd through the
|
||
# original $OLDPWD for real on the way back. Do not simplify this to a single
|
||
# cd plus an $OLDPWD assignment.
|
||
#
|
||
# Callers call it unconditionally: an ice body that cds on its own must be
|
||
# undone even when zinit itself never cd'd, so the fast path below keeps the
|
||
# case where nothing actually moved free.
|
||
#
|
||
# $1 - the $PWD to return to
|
||
# $2 - the $OLDPWD to restore; may be empty or since-deleted, in which case we
|
||
# bounce through $1 so that `cd -' degrades to a harmless no-op
|
||
.zinit-restore-dir() {
|
||
[[ $PWD == "$1" && $OLDPWD == "$2" ]] && return 0
|
||
[[ -n $2 && -d $2 ]] && .zinit-cd-quiet "$2" || .zinit-cd-quiet "$1"
|
||
.zinit-cd-quiet "$1"
|
||
} # ]]]
|
||
# FUNCTION: .zinit-any-to-user-plugin [[[
|
||
# Allows elastic plugin-spec across the code.
|
||
#
|
||
# $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
|
||
# $2 - plugin (only when $1 - i.e. user - given)
|
||
#
|
||
# $REPLY - user and plugin
|
||
.zinit-any-to-user-plugin() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob typesetsilent noshortloops rcquotes \
|
||
${${${+reply}:#0}:+warncreateglobal}
|
||
|
||
# Two components given?
|
||
# That's a pretty fast track to call this function this way.
|
||
if [[ -n $2 ]]; then
|
||
2=${~2}
|
||
reply=( ${1:-${${(M)2#/}:+%}} ${${${(M)1#%}:+$2}:-${2//---//}} )
|
||
return 0
|
||
fi
|
||
|
||
# Is it absolute path?
|
||
if [[ $1 = /* ]]; then
|
||
reply=( % $1 )
|
||
return 0
|
||
fi
|
||
|
||
# Is it absolute path in zinit format?
|
||
if [[ $1 = %* ]]; then
|
||
local -A map
|
||
map=( ZPFX "$ZPFX" HOME $HOME SNIPPETS $ZINIT[SNIPPETS_DIR] PLUGINS $ZINIT[PLUGINS_DIR] )
|
||
reply=( % ${${1/(#b)(#s)%(${(~j:|:)${(@k)map}}|)/$map[$match[1]]}} )
|
||
reply[2]=${~reply[2]}
|
||
return 0
|
||
fi
|
||
|
||
# Rest is for single component given.
|
||
# It doesn't touch $2
|
||
|
||
1=${1//---//}
|
||
if [[ $1 = */* ]]; then
|
||
reply=( ${1%%/*} ${1#*/} )
|
||
return 0
|
||
fi
|
||
|
||
reply=( "" "${1:-_unknown}" )
|
||
|
||
return 0
|
||
} # ]]]
|
||
# FUNCTION: .zinit-any-to-pid [[[
|
||
.zinit-any-to-pid() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob typesetsilent noshortloops rcquotes \
|
||
${${${+REPLY}:#0}:+warncreateglobal}
|
||
|
||
1=${~1} 2=${~2}
|
||
|
||
# Two components given?
|
||
if [[ -n $2 ]] {
|
||
if [[ $1 == (%|/)* || ( -z $1 && $2 == /* ) ]] {
|
||
.zinit-util-shands-path $1${${(M)1#(%/?|%[^/]|/?)}:+/}$2
|
||
REPLY=${${REPLY:#%*}:+%}$REPLY
|
||
} else {
|
||
REPLY=$1${1:+/}$2
|
||
}
|
||
return 0
|
||
}
|
||
|
||
# Is it absolute path?
|
||
if [[ $1 = (%|/|\~)* ]] {
|
||
.zinit-util-shands-path $1
|
||
REPLY=${${REPLY:#%*}:+%}$REPLY
|
||
return 0
|
||
}
|
||
|
||
# Single component given.
|
||
REPLY=${1//---//}
|
||
|
||
return 0
|
||
} # ]]]
|
||
# FUNCTION: .zinit-util-shands-path [[[
|
||
# Replaces parts of path with %HOME, etc.
|
||
.zinit-util-shands-path() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob typesetsilent noshortloops rcquotes \
|
||
${${${+REPLY}:#0}:+warncreateglobal}
|
||
|
||
local -A map
|
||
map=( \~ %HOME $HOME %HOME $ZINIT[SNIPPETS_DIR] %SNIPPETS $ZINIT[PLUGINS_DIR] %PLUGINS
|
||
"$ZPFX" %ZPFX HOME %HOME SNIPPETS %SNIPPETS PLUGINS %PLUGINS "" "" )
|
||
REPLY=${${1/(#b)(#s)(%|)(${(~j:|:)${(@k)map:#$HOME}}|$HOME|)/$map[$match[2]]}}
|
||
return 0
|
||
} # ]]]
|
||
# FUNCTION: .zinit-find-other-matches [[[
|
||
# Plugin's main source file is in general `name.plugin.zsh'. However,
|
||
# there can be different conventions, if that file is not found, then
|
||
# this functions examines other conventions in the most sane order.
|
||
.zinit-find-other-matches() {
|
||
local pdir_path="$1" pbase="$2" limit="$3"
|
||
|
||
# Only *.plugin.zsh load? When loading service.
|
||
if [[ $limit == 1 ]]; then
|
||
reply=( "$pdir_path"/*.plugin.zsh(DN) )
|
||
elif [[ $limit == 0 ]]; then
|
||
reply=( "$pdir_path"/*.service.zsh(DN) )
|
||
else
|
||
if [[ -e $pdir_path/init.zsh ]] {
|
||
reply=( "$pdir_path"/init.zsh )
|
||
} elif [[ -e $pdir_path/$pbase.zsh-theme ]] {
|
||
reply=( "$pdir_path/$pbase".zsh-theme )
|
||
} elif [[ -e $pdir_path/$pbase.theme.zsh ]] {
|
||
reply=( "$pdir_path/$pbase".theme.zsh )
|
||
} else {
|
||
reply=(
|
||
"$pdir_path"/*.plugin.zsh(DN) "$pdir_path"/*.zsh-theme(DN) "$pdir_path"/*.lib.zsh(DN)
|
||
"$pdir_path"/*.zsh(DN) "$pdir_path"/*.sh(DN) "$pdir_path"/.zshrc(DN)
|
||
)
|
||
}
|
||
fi
|
||
reply=( "${(u)reply[@]}" )
|
||
|
||
return $(( ${#reply} > 0 ? 0 : 1 ))
|
||
} # ]]]
|
||
# FUNCTION: .zinit-register-plugin [[[
|
||
# Adds the plugin to ZINIT_REGISTERED_PLUGINS array and to the
|
||
# zsh_loaded_plugins array (managed according to the plugin standard:
|
||
# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html).
|
||
.zinit-register-plugin() {
|
||
local uspl2="$1" mode="$2" teleid="$3"
|
||
integer ret=0
|
||
|
||
if [[ -z ${ZINIT_REGISTERED_PLUGINS[(r)$uspl2]} ]]; then
|
||
ZINIT_REGISTERED_PLUGINS+=( "$uspl2" )
|
||
else
|
||
# Allow overwrite-load, however warn about it.
|
||
[[ -z ${ZINIT[TEST]}${${+ICE[wait]}:#0}${ICE[load]}${ICE[subscribe]} && ${ZINIT[MUTE_WARNINGS]} != (1|true|on|yes) ]] && +zi-log "{u-warn}Warning{b-warn}:{rst} plugin {apo}\`{pid}${uspl2}{apo}\`{rst} already registered, will overwrite-load."
|
||
ret=1
|
||
fi
|
||
|
||
# Support Zsh plugin standard.
|
||
zsh_loaded_plugins+=( "$teleid" )
|
||
|
||
# Full or light load?
|
||
[[ $mode == light ]] && ZINIT[STATES__$uspl2]=1 || ZINIT[STATES__$uspl2]=2
|
||
|
||
ZINIT_REPORTS[$uspl2]= ZINIT_CUR_BIND_MAP=( empty 1 )
|
||
# Functions.
|
||
ZINIT[FUNCTIONS_BEFORE__$uspl2]= ZINIT[FUNCTIONS_AFTER__$uspl2]=
|
||
ZINIT[FUNCTIONS__$uspl2]=
|
||
# Objects.
|
||
ZINIT[ZSTYLES__$uspl2]= ZINIT[BINDKEYS__$uspl2]=
|
||
ZINIT[ALIASES__$uspl2]=
|
||
# Widgets.
|
||
ZINIT[WIDGETS_SAVED__$uspl2]= ZINIT[WIDGETS_DELETE__$uspl2]=
|
||
# Rest (options and (f)path).
|
||
ZINIT[OPTIONS__$uspl2]= ZINIT[PATH__$uspl2]=
|
||
ZINIT[OPTIONS_BEFORE__$uspl2]= ZINIT[OPTIONS_AFTER__$uspl2]=
|
||
ZINIT[FPATH__$uspl2]=
|
||
|
||
return ret
|
||
} # ]]]
|
||
# FUNCTION: .zinit-get-object-path [[[
|
||
.zinit-get-object-path() {
|
||
local type="$1" id_as="$2" local_dir dirname
|
||
integer exists
|
||
|
||
id_as="${ICE[id-as]:-$id_as}"
|
||
|
||
# Remove leading whitespace and trailing /.
|
||
id_as="${${id_as#"${id_as%%[! $'\t']*}"}%/}"
|
||
|
||
for type ( ${=${${(M)type:#AUTO}:+snippet plugin}:-$type} ) {
|
||
if [[ $type == snippet ]] {
|
||
dirname="${${id_as%%\?*}:t}"
|
||
local_dir="${${${id_as%%\?*}/:\/\//--}:h}"
|
||
[[ $local_dir = . ]] && local_dir= || local_dir="${${${${${local_dir#/}//\//--}//=/-EQ-}//\?/-QM-}//\&/-AMP-}"
|
||
local_dir="${ZINIT[SNIPPETS_DIR]}${local_dir:+/$local_dir}"
|
||
} else {
|
||
.zinit-any-to-user-plugin "$id_as"
|
||
local_dir=${${${(M)reply[-2]:#%}:+${reply[2]}}:-${ZINIT[PLUGINS_DIR]}/${id_as//\//---}}
|
||
[[ $id_as == _local/* && -d $local_dir && ! -d $local_dir/._zinit ]] && command mkdir -p "$local_dir"/._zinit
|
||
dirname=""
|
||
}
|
||
[[ -e $local_dir/${dirname:+$dirname/}._zinit || \
|
||
-e $local_dir/${dirname:+$dirname/}._zplugin ]] && exists=1
|
||
|
||
(( exists )) && break
|
||
}
|
||
|
||
reply=( "$local_dir" "$dirname" "$exists" )
|
||
REPLY="$local_dir${dirname:+/$dirname}"
|
||
|
||
return $(( 1 - exists ))
|
||
} # ]]]
|
||
# FUNCTION: @zinit-substitute [[[
|
||
@zinit-substitute() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob warncreateglobal typesetsilent noshortloops
|
||
|
||
local -A ___subst_map
|
||
___subst_map=(
|
||
"%ID%" "${id_as_clean:-$id_as}"
|
||
"%USER%" "$user"
|
||
"%PLUGIN%" "${plugin:-$save_url}"
|
||
"%URL%" "${save_url:-${user:+$user/}$plugin}"
|
||
"%DIR%" "${local_path:-$local_dir${dirname:+/$dirname}}"
|
||
'$ZPFX' "$ZPFX"
|
||
'${ZPFX}' "$ZPFX"
|
||
'%OS%' "${OSTYPE%(-gnu|[0-9]##)}" '%MACH%' "$MACHTYPE" '%CPU%' "$CPUTYPE"
|
||
'%VENDOR%' "$VENDOR" '%HOST%' "$HOST" '%UID%' "$UID" '%GID%' "$GID"
|
||
)
|
||
if [[ -n ${ICE[param]} && ${ZINIT[SUBST_DONE_FOR]} != ${ICE[param]} ]] {
|
||
ZINIT[SUBST_DONE_FOR]=${ICE[param]}
|
||
ZINIT[PARAM_SUBST]=
|
||
local -a ___params
|
||
___params=( ${(s.;.)ICE[param]} )
|
||
local ___param ___from ___to
|
||
for ___param ( ${___params[@]} ) {
|
||
local ___from=${${___param%%([[:space:]]|)(->|→)*}##[[:space:]]##} \
|
||
___to=${${___param#*(->|→)([[:space:]]|)}%[[:space:]]}
|
||
___from=${___from//((#s)[[:space:]]##|[[:space:]]##(#e))/}
|
||
___to=${___to//((#s)[[:space:]]##|[[:space:]]##(#e))/}
|
||
ZINIT[PARAM_SUBST]+="%${(q)___from}% ${(q)___to} "
|
||
}
|
||
}
|
||
|
||
local -a ___add
|
||
___add=( "${ICE[param]:+${(@Q)${(@z)ZINIT[PARAM_SUBST]}}}" )
|
||
(( ${#___add} % 2 == 0 )) && ___subst_map+=( "${___add[@]}" )
|
||
|
||
local ___var_name
|
||
for ___var_name; do
|
||
local ___value=${(P)___var_name}
|
||
___value=${___value//(#m)(%[a-zA-Z0-9]##%|\$ZPFX|\$\{ZPFX\})/${___subst_map[$MATCH]}}
|
||
: ${(P)___var_name::=$___value}
|
||
done
|
||
} # ]]]
|
||
# FUNCTION: @zinit-register-annex [[[
|
||
# Registers the z-annex inside Zinit – i.e. an Zinit extension
|
||
@zinit-register-annex() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
# See comment in zinit-register-hook() why nobanghist is needed
|
||
builtin setopt nobanghist
|
||
local name="$1" type="$2" handler="$3" helphandler="$4" icemods="$5" key="z-annex ${(q)2}"
|
||
ZINIT_EXTS[seqno]=$(( ${ZINIT_EXTS[seqno]:-0} + 1 ))
|
||
ZINIT_EXTS[$key${${(M)type#hook:}:+ ${ZINIT_EXTS[seqno]}}]="${ZINIT_EXTS[seqno]} z-annex-data: ${(q)name} ${(q)type} ${(q)handler} ${(q)helphandler} ${(q)icemods}"
|
||
() {
|
||
builtin emulate -LR zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
# See comment in zinit-register-hook() why nobanghist is needed
|
||
builtin setopt nobanghist
|
||
integer index="${type##[%a-zA-Z:_!-]##}"
|
||
ZINIT_EXTS[ice-mods]="${ZINIT_EXTS[ice-mods]}${icemods:+|}${(j:|:)${(@)${(@s:|:)icemods}/(#b)(#s)(?)/$index-$match[1]}}"
|
||
}
|
||
} # ]]]
|
||
# FUNCTION: @zinit-register-hook [[[
|
||
# Registers the z-annex inside Zinit (i.e., an Zinit extension)
|
||
@zinit-register-hook() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
# zsh per default behaves differently in interactive sessions (escapes !) and
|
||
# non-interactive ones (does not). Setting 'nobanghist' option disables backslash
|
||
# escaping for "!" even in interactive sessions.
|
||
# Exclamation marks are used in a lot of hock names.
|
||
builtin setopt extendedglob nobanghist noshortloops typesetsilent warncreateglobal
|
||
local name="$1" type="$2" handler="$3" icemods="$4" key="zinit ${(q)2}"
|
||
ZINIT_EXTS2[seqno]=$(( ${ZINIT_EXTS2[seqno]:-0} + 1 ))
|
||
ZINIT_EXTS2[$key${${(M)type#hook:}:+ ${ZINIT_EXTS2[seqno]}}]="${ZINIT_EXTS2[seqno]} z-annex-data: ${(q)name} ${(q)type} ${(q)handler} '' ${(q)icemods}"
|
||
ZINIT_EXTS2[ice-mods]="${ZINIT_EXTS2[ice-mods]}${icemods:+|}$icemods"
|
||
} # ]]]
|
||
# FUNCTION: @zsh-plugin-run-on-unload [[[
|
||
# The Plugin Standard required mechanism, see:
|
||
# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
|
||
@zsh-plugin-run-on-unload() {
|
||
ICE[ps-on-unload]="${(j.; .)@}"
|
||
.zinit-pack-ice "$id_as" ""
|
||
} # ]]]
|
||
# FUNCTION: @zsh-plugin-run-on-update [[[
|
||
# The Plugin Standard required mechanism
|
||
@zsh-plugin-run-on-update() {
|
||
ICE[ps-on-update]="${(j.; .)@}"
|
||
.zinit-pack-ice "$id_as" ""
|
||
} # ]]]
|
||
|
||
#
|
||
# Remaining functions.
|
||
#
|
||
|
||
# FUNCTION: .zinit-prepare-home [[[
|
||
# Creates all directories needed by Zinit, first checks if they
|
||
# already exist.
|
||
.zinit-prepare-home() {
|
||
[[ -n ${ZINIT[HOME_READY]} ]] && return
|
||
ZINIT[HOME_READY]=1
|
||
|
||
[[ ! -d ${ZINIT[HOME_DIR]} ]] && {
|
||
command mkdir -p "${ZINIT[HOME_DIR]}"
|
||
# For compaudit.
|
||
command chmod go-w "${ZINIT[HOME_DIR]}"
|
||
# Also set up */bin and ZPFX in general.
|
||
command mkdir -p "${ZPFX:-ZINIT[HOME_DIR]/polaris}/bin"
|
||
}
|
||
[[ ! -d ${ZINIT[PLUGINS_DIR]}/_local---zinit ]] && {
|
||
command rm -rf "${ZINIT[PLUGINS_DIR]:-${TMPDIR:-/tmp}/132bcaCAB}/_local---zplugin"
|
||
command mkdir -p "${ZINIT[PLUGINS_DIR]}/_local---zinit"
|
||
command chmod go-w "${ZINIT[PLUGINS_DIR]}"
|
||
command ln -s "${ZINIT[BIN_DIR]}/_zinit" "${ZINIT[PLUGINS_DIR]}/_local---zinit"
|
||
|
||
# Also set up */bin and ZPFX in general.
|
||
command mkdir -p "${ZPFX:-ZINIT[HOME_DIR]/polaris}/bin"
|
||
|
||
(( ${+functions[.zinit-setup-plugin-dir]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
(( ${+functions[.zinit-confirm]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-autoload.zsh" || return 1
|
||
.zinit-clear-completions &>/dev/null
|
||
.zinit-compinit &>/dev/null
|
||
}
|
||
[[ ! -d ${ZINIT[COMPLETIONS_DIR]} ]] && {
|
||
command mkdir "${ZINIT[COMPLETIONS_DIR]}"
|
||
# For compaudit.
|
||
command chmod go-w "${ZINIT[COMPLETIONS_DIR]}"
|
||
|
||
# Symlink _zinit completion into _local---zinit directory.
|
||
command ln -s "${ZINIT[PLUGINS_DIR]}/_local---zinit/_zinit" "${ZINIT[COMPLETIONS_DIR]}"
|
||
|
||
# Also set up */bin and ZPFX in general.
|
||
command mkdir -p "${ZPFX:-ZINIT[HOME_DIR]/polaris}/bin"
|
||
|
||
(( ${+functions[.zinit-setup-plugin-dir]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
.zinit-compinit &>/dev/null
|
||
}
|
||
[[ ! -d ${ZINIT[SNIPPETS_DIR]} ]] && {
|
||
command mkdir -p "${ZINIT[SNIPPETS_DIR]}/OMZ::plugins"
|
||
command chmod go-w "${ZINIT[SNIPPETS_DIR]}"
|
||
( builtin cd ${ZINIT[SNIPPETS_DIR]}; command ln -s OMZ::plugins plugins; )
|
||
|
||
# Also create the SERVICES_DIR.
|
||
command mkdir -p "${ZINIT[SERVICES_DIR]}"
|
||
command chmod go-w "${ZINIT[SERVICES_DIR]}"
|
||
|
||
# Also set up */bin and ZPFX in general.
|
||
command mkdir -p "${ZPFX:-ZINIT[HOME_DIR]/polaris}/bin"
|
||
}
|
||
[[ ! -d ${~ZINIT[MAN_DIR]}/man9 ]] && {
|
||
# Create ZINIT[MAN_DIR]/man{1..9}
|
||
command mkdir 2>/dev/null -p ${~ZINIT[MAN_DIR]}/man{1..9}
|
||
}
|
||
# Copy Zinit manpage so that man is able to find it
|
||
[[ ! -f $ZINIT[MAN_DIR]/man1/zinit.1 || \
|
||
$ZINIT[MAN_DIR]/man1/zinit.1 -ot $ZINIT[BIN_DIR]/doc/zinit.1 ]] && {
|
||
command mkdir -p $ZINIT[MAN_DIR]/man1
|
||
command cp -f $ZINIT[BIN_DIR]/doc/zinit.1 $ZINIT[MAN_DIR]/man1
|
||
}
|
||
} # ]]]
|
||
# FUNCTION: .zinit-load-object [[[
|
||
.zinit-load-object() {
|
||
local ___type="$1" ___id=$2
|
||
local -a ___opt
|
||
___opt=( ${@[3,-1]} )
|
||
|
||
if [[ $___type == snippet ]] {
|
||
.zinit-load-snippet $___opt "$___id"
|
||
} elif [[ $___type == plugin ]] {
|
||
.zinit-load "$___id" "" $___opt
|
||
}
|
||
___retval+=$?
|
||
|
||
return __retval
|
||
} # ]]]
|
||
# FUNCTION: .zinit-set-m-func [[[
|
||
# Sets and withdraws the temporary, atclone/atpull time function `m`.
|
||
.zinit-set-m-func() {
|
||
if [[ $1 == set ]]; then
|
||
ZINIT[___m_bkp]="${functions[m]}"
|
||
setopt noaliases
|
||
functions[m]="${functions[+zi-log]}"
|
||
setopt aliases
|
||
elif [[ $1 == unset ]]; then
|
||
if [[ -n ${ZINIT[___m_bkp]} ]]; then
|
||
setopt noaliases
|
||
functions[m]="${ZINIT[___m_bkp]}"
|
||
setopt aliases
|
||
else
|
||
noglob unset functions[m]
|
||
fi
|
||
else
|
||
+zi-log "{error}ERROR #1"
|
||
return 1
|
||
fi
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-load-snippet [[[
|
||
# Implements the exposed-to-user action of loading a snippet.
|
||
#
|
||
# $1 - url (can be local, absolute path).
|
||
.zinit-load-snippet() {
|
||
typeset -F 3 SECONDS=0
|
||
local -a opts
|
||
zparseopts -E -D -a opts f -command || { +zi-log "{u-warn}Error{b-warn}:{rst} Incorrect options (accepted ones: {opt}-f{rst}, {opt}--command{rst})."; return 1; }
|
||
local url="$1" limit="$3"
|
||
[[ -n ${ICE[teleid]} ]] && url="${ICE[teleid]}"
|
||
# Hide arguments from sourced scripts. Without this calls our "$@" are visible as "$@"
|
||
# within scripts that we `source`.
|
||
builtin set --
|
||
integer correct retval exists
|
||
[[ -o ksharrays ]] && correct=1
|
||
|
||
[[ -n ${ICE[(i)(\!|)(sh|bash|ksh|csh)]}${ICE[opts]} ]] && {
|
||
local -a precm
|
||
precm=(
|
||
builtin emulate
|
||
${${(M)${ICE[(i)(\!|)(sh|bash|ksh|csh)]}#\!}:+-R}
|
||
${${${ICE[(i)(\!|)(sh|bash|ksh|csh)]}#\!}:-zsh}
|
||
${${ICE[(i)(\!|)bash]}:+-${(s: :):-o noshglob -o braceexpand -o kshglob}}
|
||
${(s: :):-${${:-${(@s: :):--o}" "${(s: :)^ICE[opts]}}:#-o }}
|
||
-c
|
||
)
|
||
}
|
||
# Remove leading whitespace and trailing /.
|
||
url="${${url#"${url%%[! $'\t']*}"}%/}"
|
||
ICE[teleid]="${ICE[teleid]:-$url}"
|
||
[[ ${ICE[as]} = null || ${+ICE[null]} -eq 1 || ${+ICE[binary]} -eq 1 ]] && \
|
||
ICE[pick]="${ICE[pick]:-/dev/null}"
|
||
|
||
local local_dir dirname filename save_url="$url"
|
||
|
||
# Allow things like $OSTYPE in the URL.
|
||
eval "url=\"$url\""
|
||
|
||
local id_as="${ICE[id-as]:-$url}"
|
||
|
||
.zinit-set-m-func set
|
||
|
||
# Set up param'' objects (parameters).
|
||
if [[ -n ${ICE[param]} ]] {
|
||
.zinit-setup-params && local -x ${(Q)reply[@]}
|
||
}
|
||
|
||
.zinit-pack-ice "$id_as" ""
|
||
|
||
# Oh-My-Zsh, Prezto and manual shorthands.
|
||
[[ $url = *(${(~kj.|.)${(Mk)ZINIT_1MAP:#OMZ*}}|robbyrussell*oh-my-zsh|ohmyzsh/ohmyzsh)* ]] && local ZSH="${ZINIT[SNIPPETS_DIR]}"
|
||
|
||
# Construct containing directory, extract final directory
|
||
# into handy-variable $dirname.
|
||
.zinit-get-object-path snippet "$id_as"
|
||
filename="${reply[-2]}" dirname="${reply[-2]}"
|
||
local_dir="${reply[-3]}" exists=${reply[-1]}
|
||
|
||
local -a arr
|
||
local key
|
||
reply=(
|
||
${(on)ZINIT_EXTS2[(I)zinit hook:preinit-pre <->]}
|
||
${(on)ZINIT_EXTS[(I)z-annex hook:preinit-<-> <->]}
|
||
${(on)ZINIT_EXTS2[(I)zinit hook:preinit-post <->]}
|
||
)
|
||
for key in "${reply[@]}"; do
|
||
arr=( "${(Q)${(z@)ZINIT_EXTS[$key]:-$ZINIT_EXTS2[$key]}[@]}" )
|
||
if [[ -n "${arr[5]:-}" ]]; then
|
||
"${arr[5]}" snippet "$save_url" "$id_as" "$local_dir/$dirname" "${${key##(zinit|z-annex) hook:}%% <->}" load || \
|
||
return $(( 10 - $? ))
|
||
fi
|
||
done
|
||
|
||
# Download or copy the file.
|
||
if [[ -n ${opts[(r)-f]} || $exists -eq 0 ]] {
|
||
(( ${+functions[.zinit-download-snippet]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
.zinit-download-snippet "$save_url" "$url" "$id_as" "$local_dir" "$dirname" "$filename"
|
||
retval=$?
|
||
}
|
||
|
||
(( ${+ICE[cloneonly]} || retval )) && return 0
|
||
|
||
ZINIT_SNIPPETS[$id_as]="$id_as <${${ICE[svn]+svn}:-single file}>"
|
||
|
||
ZINIT[CUR_USPL2]="$id_as" ZINIT_REPORTS[$id_as]=
|
||
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atinit-<-> <->]} )
|
||
for key in "${reply[@]}"; do
|
||
arr=( "${(Q)${(z@)ZINIT_EXTS[$key]}[@]}" )
|
||
"${arr[5]}" snippet "$save_url" "$id_as" "$local_dir/$dirname" \!atinit || \
|
||
return $(( 10 - $? ))
|
||
done
|
||
|
||
(( ${+ICE[atinit]} )) && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && eval "${ICE[atinit]}"; ((1)); } || eval "${ICE[atinit]}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atinit-<-> <->]} )
|
||
for key in "${reply[@]}"; do
|
||
arr=( "${(Q)${(z@)ZINIT_EXTS[$key]}[@]}" )
|
||
"${arr[5]}" snippet "$save_url" "$id_as" "$local_dir/$dirname" atinit || \
|
||
return $(( 10 - $? ))
|
||
done
|
||
|
||
local -a list
|
||
local ZERO
|
||
|
||
if [[ -z ${opts[(r)--command]} && ( -z ${ICE[as]} || ${ICE[as]} = null || ${+ICE[null]} -eq 1 || ${+ICE[binary]} -eq 1 ) ]]; then
|
||
# Source the file with compdef temporary substituting of functions.
|
||
if [[ ${ZINIT[TMP_SUBST]} = inactive ]]; then
|
||
# Temporary substituting of functions code is inlined from .zinit-tmp-subst-on.
|
||
(( ${+functions[compdef]} )) && ZINIT[bkp-compdef]="${functions[compdef]}" || builtin unset "ZINIT[bkp-compdef]"
|
||
functions[compdef]=':zinit-tmp-subst-compdef "$@";'
|
||
ZINIT[TMP_SUBST]=1
|
||
else
|
||
(( ++ ZINIT[TMP_SUBST] ))
|
||
fi
|
||
|
||
# Add to fpath.
|
||
if [[ -d $local_dir/$dirname/functions ]] {
|
||
[[ -z ${fpath[(r)$local_dir/$dirname/functions]} ]] && fpath+=( "$local_dir/$dirname/functions" )
|
||
() {
|
||
builtin setopt localoptions extendedglob
|
||
autoload $local_dir/$dirname/functions/^([_.]*|prompt_*_setup|README*)(D-.N:t)
|
||
}
|
||
}
|
||
|
||
# Source.
|
||
if (( ${+ICE[svn]} == 0 )) {
|
||
[[ ${+ICE[pick]} = 0 ]] && list=( "$local_dir/$dirname/$filename" )
|
||
[[ -n ${ICE[pick]} ]] && list=( ${(M)~ICE[pick]##/*}(DN) $local_dir/$dirname/${~ICE[pick]}(DN) )
|
||
} else {
|
||
if [[ -n ${ICE[pick]} ]]; then
|
||
list=( ${(M)~ICE[pick]##/*}(DN) $local_dir/$dirname/${~ICE[pick]}(DN) )
|
||
elif (( ${+ICE[pick]} == 0 )); then
|
||
.zinit-find-other-matches "$local_dir/$dirname" "$filename" "$limit"
|
||
list=( ${reply[@]} )
|
||
fi
|
||
}
|
||
|
||
if [[ -f ${list[1-correct]} ]] {
|
||
ZERO="${list[1-correct]}"
|
||
(( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }
|
||
(( 0 == retval )) && [[ $url = PZT::* || $url = https://github.com/sorin-ionescu/prezto/* ]] && zstyle ":prezto:module:${${id_as%/init.zsh}:t}" loaded 'yes'
|
||
} else { [[ ${+ICE[silent]} -eq 1 || ${+ICE[pick]} -eq 1 && -z ${ICE[pick]} || ${ICE[pick]} = /dev/null ]] || { +zi-log "Snippet not loaded ({url}${id_as}{rst})"; retval=1; } }
|
||
|
||
[[ -n ${ICE[src]} ]] && { ZERO="${${(M)ICE[src]##/*}:-$local_dir/$dirname/${ICE[src]}}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; }
|
||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$local_dir/$dirname"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; local fname; for fname in "${reply[@]}"; do ZERO="${${(M)fname:#/*}:-$local_dir/$dirname/$fname}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; done; }
|
||
|
||
# Run the atload hooks right before atload ice.
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||
for key in "${reply[@]}"; do
|
||
arr=( "${(Q)${(z@)ZINIT_EXTS[$key]}[@]}" )
|
||
"${arr[5]}" snippet "$save_url" "$id_as" "$local_dir/$dirname" \!atload
|
||
done
|
||
|
||
# Run the functions' wrapping & tracking requests.
|
||
if [[ -n ${ICE[wrap]} ]] {
|
||
(( ${+functions[.zinit-service]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-additional.zsh"
|
||
.zinit-wrap-functions "$save_url" "" "$id_as"
|
||
}
|
||
|
||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && builtin eval "${ICE[atload]#\!}"; ((1)); } || eval "${ICE[atload]#\!}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
|
||
(( -- ZINIT[TMP_SUBST] == 0 )) && { ZINIT[TMP_SUBST]=inactive; builtin setopt noaliases; (( ${+ZINIT[bkp-compdef]} )) && functions[compdef]="${ZINIT[bkp-compdef]}" || unfunction compdef; (( ZINIT[ALIASES_OPT] )) && builtin setopt aliases; }
|
||
elif [[ -n ${opts[(r)--command]} || ${ICE[as]} = command ]]; then
|
||
[[ ${+ICE[pick]} = 1 && -z ${ICE[pick]} ]] && \
|
||
ICE[pick]="${id_as:t}"
|
||
# Subversion - directory and multiple files possible.
|
||
if (( ${+ICE[svn]} )); then
|
||
if [[ -n ${ICE[pick]} ]]; then
|
||
list=( ${(M)~ICE[pick]##/*}(DN) $local_dir/$dirname/${~ICE[pick]}(DN) )
|
||
[[ -n ${list[1-correct]} ]] && local xpath="${list[1-correct]:h}" xfilepath="${list[1-correct]}"
|
||
else
|
||
local xpath="$local_dir/$dirname"
|
||
fi
|
||
else
|
||
local xpath="$local_dir/$dirname" xfilepath="$local_dir/$dirname/$filename"
|
||
# This doesn't make sense, but users may come up with something.
|
||
[[ -n ${ICE[pick]} ]] && {
|
||
list=( ${(M)~ICE[pick]##/*}(DN) $local_dir/$dirname/${~ICE[pick]}(DN) )
|
||
[[ -n ${list[1-correct]} ]] && xpath="${list[1-correct]:h}" xfilepath="${list[1-correct]}"
|
||
}
|
||
fi
|
||
[[ -n $xpath && -z ${path[(er)$xpath]} ]] && path=( "${xpath%/}" ${path[@]} )
|
||
[[ -n $xfilepath && -f $xfilepath && ! -x "$xfilepath" ]] && command chmod a+x "$xfilepath" ${list[@]:#$xfilepath}
|
||
[[ -n ${ICE[src]} || -n ${ICE[multisrc]} || ${ICE[atload][1]} = "!" ]] && {
|
||
if [[ ${ZINIT[TMP_SUBST]} = inactive ]]; then
|
||
# Temporary substituting of functions code is inlined from .zinit-tmp-subst-on.
|
||
(( ${+functions[compdef]} )) && ZINIT[bkp-compdef]="${functions[compdef]}" || builtin unset "ZINIT[bkp-compdef]"
|
||
functions[compdef]=':zinit-tmp-subst-compdef "$@";'
|
||
ZINIT[TMP_SUBST]=1
|
||
else
|
||
(( ++ ZINIT[TMP_SUBST] ))
|
||
fi
|
||
}
|
||
|
||
if [[ -n ${ICE[src]} ]]; then
|
||
ZERO="${${(M)ICE[src]##/*}:-$local_dir/$dirname/${ICE[src]}}"
|
||
(( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }
|
||
fi
|
||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$local_dir/$dirname"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; local fname; for fname in "${reply[@]}"; do ZERO="${${(M)fname:#/*}:-$local_dir/$dirname/$fname}"; (( ${+ICE[silent]} )) && { { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( retval += $? )); ((1)); } || { ((1)); { [[ -n $precm ]] && { builtin ${precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); builtin source "$ZERO"; }; }; (( retval += $? )); }; done; }
|
||
|
||
# Run the atload hooks right before atload ice.
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||
for key in "${reply[@]}"; do
|
||
arr=( "${(Q)${(z@)ZINIT_EXTS[$key]}[@]}" )
|
||
"${arr[5]}" snippet "$save_url" "$id_as" "$local_dir/$dirname" \!atload
|
||
done
|
||
|
||
# Run the functions' wrapping & tracking requests.
|
||
if [[ -n ${ICE[wrap]} ]] {
|
||
(( ${+functions[.zinit-service]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-additional.zsh"
|
||
.zinit-wrap-functions "$save_url" "" "$id_as"
|
||
}
|
||
|
||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && builtin eval "${ICE[atload]#\!}"; ((1)); } || eval "${ICE[atload]#\!}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
|
||
[[ -n ${ICE[src]} || -n ${ICE[multisrc]} || ${ICE[atload][1]} = "!" ]] && {
|
||
(( -- ZINIT[TMP_SUBST] == 0 )) && { ZINIT[TMP_SUBST]=inactive; builtin setopt noaliases; (( ${+ZINIT[bkp-compdef]} )) && functions[compdef]="${ZINIT[bkp-compdef]}" || unfunction compdef; (( ZINIT[ALIASES_OPT] )) && builtin setopt aliases; }
|
||
}
|
||
elif [[ ${ICE[as]} = completion ]]; then
|
||
((1))
|
||
fi
|
||
|
||
(( ${+ICE[atload]} )) && [[ ${ICE[atload][1]} != "!" ]] && { ZERO="$local_dir/$dirname/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$local_dir/$dirname" && builtin eval "${ICE[atload]}"; ((1)); } || eval "${ICE[atload]}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atload-<-> <->]} )
|
||
for key in "${reply[@]}"; do
|
||
arr=( "${(Q)${(z@)ZINIT_EXTS[$key]}[@]}" )
|
||
"${arr[5]}" snippet "$save_url" "$id_as" "$local_dir/$dirname" atload
|
||
done
|
||
|
||
(( ${+ICE[notify]} == 1 )) && { [[ $retval -eq 0 || -n ${(M)ICE[notify]#\!} ]] && { local msg; eval "msg=\"${ICE[notify]#\!}\""; +zinit-deploy-message @msg "$msg" } || +zinit-deploy-message @msg "notify: Plugin not loaded / loaded with problem, the return code: $retval"; }
|
||
(( ${+ICE[reset-prompt]} == 1 )) && +zinit-deploy-message @rst
|
||
|
||
ZINIT[CUR_USPL2]=
|
||
ZINIT[TIME_INDEX]=$(( ${ZINIT[TIME_INDEX]:-0} + 1 ))
|
||
ZINIT[TIME_${ZINIT[TIME_INDEX]}_${id_as}]=$SECONDS
|
||
ZINIT[AT_TIME_${ZINIT[TIME_INDEX]}_${id_as}]=$EPOCHREALTIME
|
||
|
||
.zinit-set-m-func unset
|
||
return retval
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-load [[[
|
||
# Implements the exposed-to-user action of loading a plugin.
|
||
#
|
||
# $1 - plugin spec (4 formats: user---plugin, user/plugin, user, plugin)
|
||
# $2 - plugin name, if the third format is used
|
||
.zinit-load() {
|
||
typeset -F 3 SECONDS=0
|
||
local ___mode="$3" ___limit="$4" ___rst=0 ___retval=0 ___key
|
||
.zinit-any-to-user-plugin "$1" "$2"
|
||
local ___user="${reply[-2]}" ___plugin="${reply[-1]}" ___id_as="${ICE[id-as]:-${reply[-2]}${${reply[-2]:#(%|/)*}:+/}${reply[-1]}}"
|
||
local ___pdir_path="${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}"
|
||
local ___pdir_orig="$___pdir_path"
|
||
ZINIT[CUR_USR]="$___user" ZINIT[CUR_PLUGIN]="$___plugin" ZINIT[CUR_USPL2]="$___id_as"
|
||
if [[ -n ${ICE[teleid]} ]] {
|
||
.zinit-any-to-user-plugin "${ICE[teleid]}"
|
||
___user="${reply[-2]}" ___plugin="${reply[-1]}"
|
||
} else {
|
||
ICE[teleid]="$___user${${___user:#%}:+/}$___plugin"
|
||
}
|
||
|
||
.zinit-set-m-func set
|
||
|
||
local -a ___arr
|
||
reply=(
|
||
${(on)ZINIT_EXTS2[(I)zinit hook:preinit-pre <->]}
|
||
${(on)ZINIT_EXTS[(I)z-annex hook:preinit-<-> <->]}
|
||
${(on)ZINIT_EXTS2[(I)zinit hook:preinit-post <->]}
|
||
)
|
||
for ___key in "${reply[@]}"; do
|
||
___arr=( "${(Q)${(z@)ZINIT_EXTS[$___key]:-$ZINIT_EXTS2[$___key]}[@]}" )
|
||
if [[ -n "${___arr[5]:-}" ]]; then
|
||
"${___arr[5]}" plugin "$___user" "$___plugin" "$___id_as" "$___pdir_orig" "${${___key##(zinit|z-annex) hook:}%% <->}" load || \
|
||
return $(( 10 - $? ))
|
||
fi
|
||
done
|
||
|
||
if [[ $___user != % && ! -d ${ZINIT[PLUGINS_DIR]}/${___id_as//\//---} ]] {
|
||
(( ${+functions[.zinit-setup-plugin-dir]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
reply=( "$___user" "$___plugin" ) REPLY=github
|
||
if (( ${+ICE[pack]} )) {
|
||
if ! .zinit-get-package "$___user" "$___plugin" "$___id_as" \
|
||
"${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}" \
|
||
"${ICE[pack]:-default}"
|
||
then
|
||
zle && { builtin print; zle .reset-prompt; }
|
||
return 1
|
||
fi
|
||
___id_as="${ICE[id-as]:-${___user}${${___user:#(%|/)*}:+/}$___plugin}"
|
||
}
|
||
___user="${reply[-2]}" ___plugin="${reply[-1]}"
|
||
ICE[teleid]="$___user${${___user:#(%|/)*}:+/}$___plugin"
|
||
[[ $REPLY = snippet ]] && {
|
||
ICE[id-as]="${ICE[id-as]:-$___id_as}"
|
||
.zinit-load-snippet $___plugin "" $___limit && return
|
||
zle && { builtin print; zle .reset-prompt; }
|
||
return 1
|
||
}
|
||
.zinit-setup-plugin-dir "$___user" "$___plugin" "$___id_as" "$REPLY"
|
||
local rc="$?"
|
||
if [[ "$rc" -ne 0 ]]; then
|
||
zle && { builtin print; zle .reset-prompt; }
|
||
return "$rc"
|
||
fi
|
||
zle && ___rst=1
|
||
}
|
||
|
||
ZINIT_SICE[$___id_as]=
|
||
.zinit-pack-ice "$___id_as"
|
||
|
||
(( ${+ICE[cloneonly]} )) && return 0
|
||
|
||
.zinit-register-plugin "$___id_as" "$___mode" "${ICE[teleid]}"
|
||
|
||
# Set up param'' objects (parameters).
|
||
if [[ -n ${ICE[param]} ]] {
|
||
.zinit-setup-params && local -x ${(Q)reply[@]}
|
||
}
|
||
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atinit-<-> <->]} )
|
||
for ___key in "${reply[@]}"; do
|
||
___arr=( "${(Q)${(z@)ZINIT_EXTS[$___key]}[@]}" )
|
||
"${___arr[5]}" plugin "$___user" "$___plugin" "$___id_as" "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" \!atinit || \
|
||
return $(( 10 - $? ))
|
||
done
|
||
|
||
[[ ${+ICE[atinit]} = 1 && $ICE[atinit] != '!'* ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" && eval "${ICE[atinit]}"; ((1)); } || eval "${ICE[atinit]}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atinit-<-> <->]} )
|
||
for ___key in "${reply[@]}"; do
|
||
___arr=( "${(Q)${(z@)ZINIT_EXTS[$___key]}[@]}" )
|
||
"${___arr[5]}" plugin "$___user" "$___plugin" "$___id_as" "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" atinit || \
|
||
return $(( 10 - $? ))
|
||
done
|
||
|
||
.zinit-load-plugin "$___user" "$___plugin" "$___id_as" \
|
||
"$___mode" "$___rst" "$___limit" ; ___retval=$?
|
||
(( ${+ICE[notify]} == 1 )) && { [[ $___retval -eq 0 || -n ${(M)ICE[notify]#\!} ]] && { local msg; eval "msg=\"${ICE[notify]#\!}\""; +zinit-deploy-message @msg "$msg" } || +zinit-deploy-message @msg "notify: Plugin not loaded / loaded with problem, the return code: $___retval"; }
|
||
(( ${+ICE[reset-prompt]} == 1 )) && +zinit-deploy-message @___rst
|
||
|
||
# Unset the `m` function.
|
||
.zinit-set-m-func unset
|
||
|
||
# Mark no load is in progress.
|
||
ZINIT[CUR_USR]= ZINIT[CUR_PLUGIN]= ZINIT[CUR_USPL2]=
|
||
|
||
ZINIT[TIME_INDEX]=$(( ${ZINIT[TIME_INDEX]:-0} + 1 ))
|
||
ZINIT[TIME_${ZINIT[TIME_INDEX]}_${___id_as//\//---}]=$SECONDS
|
||
ZINIT[AT_TIME_${ZINIT[TIME_INDEX]}_${___id_as//\//---}]=$EPOCHREALTIME
|
||
return ___retval
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-load-plugin [[[
|
||
# Lower-level function for loading a plugin.
|
||
#
|
||
# $1 - user
|
||
# $2 - plugin
|
||
# $3 - mode (light or load)
|
||
.zinit-load-plugin() {
|
||
local ___user="$1" ___plugin="$2" ___id_as="$3" ___mode="$4" \
|
||
___rst="$5" ___limit="$6" ___correct=0 ___retval=0
|
||
local ___pbase="${${___plugin:t}%(.plugin.zsh|.zsh|.git)}" ___key
|
||
# Hide arguments from sourced scripts. Without this calls our "$@" are visible as "$@"
|
||
# within scripts that we `source`.
|
||
builtin set --
|
||
[[ -o ksharrays ]] && ___correct=1
|
||
|
||
[[ -n ${ICE[(i)(\!|)(sh|bash|ksh|csh)]}${ICE[opts]} ]] && {
|
||
local -a ___precm
|
||
___precm=(
|
||
builtin emulate
|
||
${${(M)${ICE[(i)(\!|)(sh|bash|ksh|csh)]}#\!}:+-R}
|
||
${${${ICE[(i)(\!|)(sh|bash|ksh|csh)]}#\!}:-zsh}
|
||
${${ICE[(i)(\!|)bash]}:+-${(s: :):-o noshglob -o braceexpand -o kshglob}}
|
||
${(s: :):-${${:-${(@s: :):--o}" "${(s: :)^ICE[opts]}}:#-o }}
|
||
-c
|
||
)
|
||
}
|
||
|
||
[[ -z ${ICE[subst]} ]] && local ___builtin=builtin
|
||
|
||
[[ ${ICE[as]} = null || ${+ICE[null]} -eq 1 || ${+ICE[binary]} -eq 1 ]] && \
|
||
ICE[pick]="${ICE[pick]:-/dev/null}"
|
||
|
||
if [[ -n ${ICE[autoload]} ]] {
|
||
:zinit-tmp-subst-autoload -Uz \
|
||
${(s: :)${${${(s.;.)ICE[autoload]#[\!\#]}#[\!\#]}//(#b)((*)(->|=>|→)(*)|(*))/${match[2]:+$match[2] -S $match[4]}${match[5]:+${match[5]} -S ${match[5]}}}} \
|
||
${${(M)ICE[autoload]:#*(->|=>|→)*}:+-C} ${${(M)ICE[autoload]#(?\!|\!)}:+-C} ${${(M)ICE[autoload]#(?\#|\#)}:+-I}
|
||
}
|
||
|
||
if [[ ${ICE[as]} = command ]]; then
|
||
[[ ${+ICE[pick]} = 1 && -z ${ICE[pick]} ]] && \
|
||
ICE[pick]="${___id_as:t}"
|
||
reply=()
|
||
if [[ -n ${ICE[pick]} && ${ICE[pick]} != /dev/null ]]; then
|
||
reply=( ${(M)~ICE[pick]##/*}(DN) $___pdir_path/${~ICE[pick]}(DN) )
|
||
[[ -n ${reply[1-correct]} ]] && ___pdir_path="${reply[1-correct]:h}"
|
||
fi
|
||
[[ -z ${path[(er)$___pdir_path]} ]] && {
|
||
[[ $___mode != light ]] && .zinit-diff-env "${ZINIT[CUR_USPL2]}" begin
|
||
path=( "${___pdir_path%/}" ${path[@]} )
|
||
[[ $___mode != light ]] && .zinit-diff-env "${ZINIT[CUR_USPL2]}" end
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "$ZINIT[col-info2]$___pdir_path$ZINIT[col-rst] added to \$PATH"
|
||
}
|
||
[[ -n ${reply[1-correct]} && ! -x ${reply[1-correct]} ]] && command chmod a+x ${reply[@]}
|
||
|
||
[[ ${ICE[atinit]} = '!'* || -n ${ICE[src]} || -n ${ICE[multisrc]} || ${ICE[atload][1]} = "!" ]] && {
|
||
if [[ ${ZINIT[TMP_SUBST]} = inactive ]]; then
|
||
(( ${+functions[compdef]} )) && ZINIT[bkp-compdef]="${functions[compdef]}" || builtin unset "ZINIT[bkp-compdef]"
|
||
functions[compdef]=':zinit-tmp-subst-compdef "$@";'
|
||
ZINIT[TMP_SUBST]=1
|
||
else
|
||
(( ++ ZINIT[TMP_SUBST] ))
|
||
fi
|
||
}
|
||
|
||
local ZERO
|
||
[[ $ICE[atinit] = '!'* ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" && eval "${ICE[atinit#!]}"; ((1)); } || eval "${ICE[atinit]#!}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
[[ -n ${ICE[src]} ]] && { ZERO="${${(M)ICE[src]##/*}:-$___pdir_orig/${ICE[src]}}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }; }
|
||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$___pdir_orig"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; local ___fname; for ___fname in "${reply[@]}"; do ZERO="${${(M)___fname:#/*}:-$___pdir_orig/$___fname}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }; done; }
|
||
|
||
# Run the atload hooks right before atload ice.
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||
for ___key in "${reply[@]}"; do
|
||
___arr=( "${(Q)${(z@)ZINIT_EXTS[$___key]}[@]}" )
|
||
"${___arr[5]}" plugin "$___user" "$___plugin" "$___id_as" "$___pdir_orig" \!atload
|
||
done
|
||
|
||
# Run the functions' wrapping & tracking requests.
|
||
if [[ -n ${ICE[wrap]} ]] {
|
||
(( ${+functions[.zinit-service]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-additional.zsh"
|
||
.zinit-wrap-functions "$___user" "$___plugin" "$___id_as"
|
||
}
|
||
|
||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$___id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$___pdir_orig" && builtin eval "${ICE[atload]#\!}"; ((1)); } || eval "${ICE[atload]#\!}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
|
||
[[ -n ${ICE[src]} || -n ${ICE[multisrc]} || ${ICE[atload][1]} = "!" ]] && {
|
||
(( -- ZINIT[TMP_SUBST] == 0 )) && { ZINIT[TMP_SUBST]=inactive; builtin setopt noaliases; (( ${+ZINIT[bkp-compdef]} )) && functions[compdef]="${ZINIT[bkp-compdef]}" || unfunction compdef; (( ZINIT[ALIASES_OPT] )) && builtin setopt aliases; }
|
||
}
|
||
elif [[ ${ICE[as]} = completion ]]; then
|
||
((1))
|
||
else
|
||
if [[ -n ${ICE[pick]} ]]; then
|
||
[[ ${ICE[pick]} = /dev/null ]] && reply=( /dev/null ) || reply=( ${(M)~ICE[pick]##/*}(DN) $___pdir_path/${~ICE[pick]}(DN) )
|
||
elif [[ -e $___pdir_path/$___pbase.plugin.zsh && $___limit -ne 0 ]]; then
|
||
reply=( "$___pdir_path/$___pbase".plugin.zsh )
|
||
else
|
||
.zinit-find-other-matches "$___pdir_path" "$___pbase" "$___limit"
|
||
fi
|
||
|
||
#[[ ${#reply} -eq 0 ]] && return 1
|
||
|
||
# Get first one.
|
||
local ___fname="${reply[1-correct]:t}"
|
||
___pdir_path="${reply[1-correct]:h}"
|
||
|
||
.zinit-add-report "${ZINIT[CUR_USPL2]}" "Source $___fname ${${${(M)___mode:#light}:+(no reporting)}:-$ZINIT[col-info2](reporting enabled)$ZINIT[col-rst]}"
|
||
|
||
# Light and compdef ___mode doesn't do diffs and temporary substituting of functions.
|
||
[[ $___mode != light(|-b) ]] && .zinit-diff "${ZINIT[CUR_USPL2]}" begin
|
||
|
||
.zinit-tmp-subst-on "${___mode:-load}"
|
||
|
||
# We need some state, but ___user wants his for his plugins.
|
||
(( ${+ICE[blockf]} )) && { local -a fpath_bkp; fpath_bkp=( "${fpath[@]}" ); }
|
||
local ZERO="$___pdir_path/$___fname"
|
||
(( ${+ICE[aliases]} )) || builtin setopt noaliases
|
||
[[ $ICE[atinit] = '!'* ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}}" && eval "${ICE[atinit]#!}"; ((1)); } || eval "${ICE[atinit]#1}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
(( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }
|
||
[[ -n ${ICE[src]} ]] && { ZERO="${${(M)ICE[src]##/*}:-$___pdir_orig/${ICE[src]}}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { ((1)); { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); }; }
|
||
[[ -n ${ICE[multisrc]} ]] && { local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; .zinit-cd-quiet "$___pdir_orig"; eval "reply=(${ICE[multisrc]})"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; for ___fname in "${reply[@]}"; do ZERO="${${(M)___fname:#/*}:-$___pdir_orig/$___fname}"; (( ${+ICE[silent]} )) && { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; } 2>/dev/null 1>&2; (( ___retval += $? )); ((1)); } || { { [[ -n $___precm ]] && { builtin ${___precm[@]} 'source "$ZERO"'; ((1)); } || { ((1)); $___builtin source "$ZERO"; }; }; (( ___retval += $? )); } done; }
|
||
|
||
# Run the atload hooks right before atload ice.
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:\!atload-<-> <->]} )
|
||
for ___key in "${reply[@]}"; do
|
||
___arr=( "${(Q)${(z@)ZINIT_EXTS[$___key]}[@]}" )
|
||
"${___arr[5]}" plugin "$___user" "$___plugin" "$___id_as" "$___pdir_orig" \!atload
|
||
done
|
||
|
||
# Run the functions' wrapping & tracking requests.
|
||
if [[ -n ${ICE[wrap]} ]] {
|
||
(( ${+functions[.zinit-service]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-additional.zsh"
|
||
.zinit-wrap-functions "$___user" "$___plugin" "$___id_as"
|
||
}
|
||
|
||
[[ ${ICE[atload][1]} = "!" ]] && { .zinit-add-report "$___id_as" "Note: Starting to track the atload'!…' ice…"; ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$___pdir_orig" && builtin eval "${ICE[atload]#\!}"; ((1)); } || eval "${ICE[atload]#\!}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
(( ZINIT[ALIASES_OPT] )) && builtin setopt aliases
|
||
(( ${+ICE[blockf]} )) && { fpath=( "${fpath_bkp[@]}" ); }
|
||
|
||
.zinit-tmp-subst-off "${___mode:-load}"
|
||
|
||
[[ $___mode != light(|-b) ]] && .zinit-diff "${ZINIT[CUR_USPL2]}" end
|
||
fi
|
||
|
||
[[ ${+ICE[atload]} = 1 && ${ICE[atload][1]} != "!" ]] && { ZERO="$___pdir_orig/-atload-"; local ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"; (( ${+ICE[nocd]} == 0 )) && { .zinit-cd-quiet "$___pdir_orig" && builtin eval "${ICE[atload]}"; ((1)); } || eval "${ICE[atload]}"; .zinit-restore-dir "$___oldcd" "$___oldoldpwd"; ((1)); }
|
||
|
||
reply=( ${(on)ZINIT_EXTS[(I)z-annex hook:atload-<-> <->]} )
|
||
for ___key in "${reply[@]}"; do
|
||
___arr=( "${(Q)${(z@)ZINIT_EXTS[$___key]}[@]}" )
|
||
"${___arr[5]}" plugin "$___user" "$___plugin" "$___id_as" "$___pdir_orig" atload
|
||
done
|
||
|
||
(( ___rst )) && { builtin print; zle .reset-prompt; }
|
||
|
||
return ___retval
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-compdef-replay [[[
|
||
# Runs gathered compdef calls. This allows to run 'compinit' after loading plugins.
|
||
.zinit-compdef-replay() {
|
||
local quiet="$1"
|
||
typeset -a pos
|
||
|
||
# Check if compinit was loaded.
|
||
if [[ ${+functions[compdef]} = 0 ]]; then
|
||
+zi-log "{u-warn}Error{b-warn}:{rst} The {func}compinit{rst}" \
|
||
"function hasn't been loaded, cannot do {it}{cmd}compdef replay{rst}."
|
||
return 1
|
||
fi
|
||
|
||
# In the same order.
|
||
local cdf
|
||
for cdf in "${ZINIT_COMPDEF_REPLAY[@]}"; do
|
||
pos=( "${(z)cdf}" )
|
||
# When ZINIT_COMPDEF_REPLAY empty (also when only white spaces).
|
||
[[ ${#pos[@]} = 1 && -z ${pos[-1]} ]] && continue
|
||
pos=( "${(Q)pos[@]}" )
|
||
[[ $quiet = -q ]] || +zi-log "Running compdef: {cmd}${pos[*]}{rst}"
|
||
compdef "${pos[@]}"
|
||
done
|
||
|
||
return 0
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-compdef-clear [[[
|
||
# Implements user-exposed functionality to clear gathered compdefs.
|
||
.zinit-compdef-clear() {
|
||
local quiet="$1" count="${#ZINIT_COMPDEF_REPLAY}"
|
||
ZINIT_COMPDEF_REPLAY=( )
|
||
[[ $quiet = -q ]] || +zi-log "Compdef-replay cleared (it had {num}${count}{rst} entries)."
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-add-report [[[
|
||
# Adds a report line for given plugin.
|
||
#
|
||
# $1 - uspl2, i.e. user/plugin
|
||
# $2 - the text
|
||
.zinit-add-report() {
|
||
# Use zinit binary module if available.
|
||
[[ -n $1 ]] && { (( ${+builtins[zpmod]} && 0 )) && zpmod report-append "$1" "$2"$'\n' || ZINIT_REPORTS[$1]+="$2"$'\n'; }
|
||
[[ ${ZINIT[DTRACE]} = 1 ]] && { (( ${+builtins[zpmod]} )) && zpmod report-append _dtrace/_dtrace "$2"$'\n' || ZINIT_REPORTS[_dtrace/_dtrace]+="$2"$'\n'; }
|
||
return 0
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-add-fpath [[[
|
||
.zinit-add-fpath() {
|
||
[[ $1 = (-f|--front) ]] && { shift; integer front=1; }
|
||
.zinit-any-to-user-plugin "$1" ""
|
||
local id_as="$1" add_dir="$2" user="${reply[-2]}" plugin="${reply[-1]}"
|
||
if (( front )) {
|
||
fpath[1,0]=${${${(M)user:#%}:+$plugin}:-${ZINIT[PLUGINS_DIR]}/${id_as//\//---}}${add_dir:+/$add_dir}
|
||
} else {
|
||
fpath+=(
|
||
${${${(M)user:#%}:+$plugin}:-${ZINIT[PLUGINS_DIR]}/${id_as//\//---}}${add_dir:+/$add_dir}
|
||
)
|
||
}
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-run [[[
|
||
# Run code inside plugins folder
|
||
# It uses the 'correct' parameter from uppers scope zinit().
|
||
.zinit-run() {
|
||
if [[ $1 = (-l|--last) ]]; then
|
||
{ set -- "${ZINIT[last-run-plugin]:-$(<${ZINIT[BIN_DIR]}/last-run-object.txt)}" "${@[2-correct,-1]}"; } &>/dev/null
|
||
[[ -z $1 ]] && { +zi-log "{u-warn}Error{b-warn}:{rst} No recent plugin-ID saved on the disk yet, please specify" \
|
||
"it as the first argument, i.e.{ehi}: {cmd}zi run {pid}usr/plg{slight} {…}the code to run{…} "; return 1; }
|
||
else
|
||
integer ___nolast=1
|
||
fi
|
||
.zinit-any-to-user-plugin "$1" ""
|
||
local ___id_as="$1" ___user="${reply[-2]}" ___plugin="${reply[-1]}" ___oldcd="$PWD" ___oldoldpwd="$OLDPWD"
|
||
() {
|
||
builtin emulate -LR zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin cd &>/dev/null -q ${${${(M)___user:#%}:+$___plugin}:-${ZINIT[PLUGINS_DIR]}/${___id_as//\//---}} || {
|
||
.zinit-get-object-path snippet "$___id_as"
|
||
builtin cd &>/dev/null -q $REPLY
|
||
}
|
||
}
|
||
if (( $? == 0 )); then
|
||
(( ___nolast )) && { builtin print -r "$1" >! ${ZINIT[BIN_DIR]}/last-run-object.txt; }
|
||
ZINIT[last-run-plugin]="$1"
|
||
eval "${@[2-correct,-1]}"
|
||
.zinit-restore-dir "$___oldcd" "$___oldoldpwd"
|
||
else
|
||
+zi-log "{u-warn}Error{b-warn}:{rst} no such plugin or snippet."
|
||
fi
|
||
} # ]]]
|
||
|
||
# FUNCTION: +zinit-deploy-message [[[
|
||
# Deploys a sub-prompt message to be displayed OR a 'zle .reset-prompt'
|
||
# call to be invoked
|
||
+zinit-deploy-message() {
|
||
[[ $1 = <-> && ( ${#} = 1 || ( $2 = (hup|nval|err) && ${#} = 2 ) ) ]] && { zle && {
|
||
local alltext text IFS=$'\n' nl=$'\n'
|
||
repeat 25; do read -r -u"$1" text; alltext+="${text:+$text$nl}"; done
|
||
[[ $alltext = @rst$nl ]] && { builtin zle reset-prompt; ((1)); } || \
|
||
{ [[ -n $alltext ]] && builtin zle -M "$alltext"; }
|
||
}
|
||
builtin zle -F "$1"; exec {1}<&-
|
||
return 0
|
||
}
|
||
local THEFD=13371337 hasw
|
||
# The expansion is: if there is @sleep: pfx, then use what is after.
|
||
# it, otherwise substitute 0
|
||
exec {THEFD} < <(LANG=C sleep $(( 0.01 + ${${${(M)1#@sleep:}:+${1#@sleep:}}:-0} )); builtin print -r -- ${1:#(@msg|@sleep:*)} "${@[2,-1]}"; )
|
||
command true # workaround a Zsh bug, see: https://www.zsh.org/mla/workers/2018/msg00966.html
|
||
builtin zle -F "$THEFD" +zinit-deploy-message
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-formatter-auto [[[
|
||
.zinit-formatter-auto() {
|
||
emulate -L zsh -o extendedglob -o warncreateglobal -o typesetsilent
|
||
local out in=$1 i wrk match spaces rest
|
||
integer mbegin mend
|
||
local -a ice_order ecmds
|
||
ice_order=(
|
||
${(As:|:)ZINIT[ice-list]}
|
||
${(@)${(A@kons:|:)${ZINIT_EXTS[ice-mods]//\'\'/}}/(#s)<->-/}
|
||
)
|
||
ecmds=( ${ZINIT_EXTS[(I)z-annex subcommand:*]#z-annex subcommand:} )
|
||
|
||
in=${(j: :)${${(Z+Cn+)in}//[$'\t ']/$'\u00a0'}}
|
||
wrk=$in
|
||
# Work on input bit by bit on whitespace separated words
|
||
while [[ $in == (#b)([[:space:]]#)([^[:space:]]##)(*) ]]; do
|
||
spaces=$match[1]
|
||
rest=$match[3]
|
||
wrk=${match[2]//---//}
|
||
REPLY=$wrk
|
||
# Is it a time?
|
||
if [[ $wrk == ([[:space:]]##|(#s))[0-9.]##([[:space:]]##|(#e)) &&
|
||
$rest == ([[:space:]]#|(#s))[sm]([[:space:]]##*|(#e)) || $wrk == ([[:space:]]##|(#s))[0-9.]##[sm]([[:space:]]##|(#e)) ]]; then
|
||
REPLY=$ZINIT[col-time]$wrk$ZINIT[col-rst]
|
||
# Colorize next token
|
||
if [[ $wrk != *[sm]* ]]; then
|
||
rest=$ZINIT[col-time]${(M)rest##[[:space:]]#[sm]}$ZINIT[col-rst]${rest##[[:space:]]#[sm]}
|
||
fi
|
||
# Is it a number?
|
||
# TODO: differentiate floats
|
||
elif [[ $wrk == ([[:space:]]##|(#s))[0-9.]##([[:space:]]##|(#e)) ]]; then
|
||
REPLY=$ZINIT[col-num]$wrk$ZINIT[col-rst]
|
||
# Is it a URL?
|
||
elif [[ $wrk == (#b)(((http|ftp)(|s)|ssh|scp|ntp|file)://[[:alnum:].:+/]##) ]]; then
|
||
.zinit-formatter-url $wrk
|
||
# Is it an ice mod?
|
||
elif [[ $wrk == (--|)(${(~j:|:)ice_order})[:=\"\'\!a-zA-Z0-9-]* ]]; then
|
||
REPLY=$ZINIT[col-ice]$wrk$ZINIT[col-rst]
|
||
# Is it an object ID?
|
||
elif [[ $wrk == (OMZ([PLT]|)|PZT([MLT]|)):* || $wrk == [^/]##/[^/]## || -d $ZINIT[PLUGINS_DIR]/${wrk//\//---} ]]; then
|
||
.zinit-formatter-pid $wrk
|
||
# Is it a zinit command?
|
||
elif [[ $wrk == (${~ZINIT[cmds]}|${(~j:|:)ecmds}) ]]; then
|
||
REPLY=$ZINIT[col-cmd]$wrk$ZINIT[col-rst]
|
||
# Is it a binary or other runnable?
|
||
elif type $1 &>/dev/null; then
|
||
REPLY=$ZINIT[col-bcmd]$wrk$ZINIT[col-rst]
|
||
# Is it a single-char glymph?
|
||
elif [[ $wrk == (#b)(*)('<->'|'<–>'|'<—>')(*) || $wrk == (#b)(*)(…|–|—|↔|...)(*) ]]; then
|
||
local -A map=( … … - dsh – ndsh
|
||
— mdsh '<->' ↔ '<–>' ↔ '<—>' ↔
|
||
↔ ↔ ... …)
|
||
REPLY=$match[1]$ZINIT[col-$map[$wrk]]$match[3]
|
||
# Is it a quoted string?
|
||
# \1 - preceding \2 - open, \3 - string, \4 - close, \5 - following
|
||
elif [[ $wrk == (#b)(*)([\'\`\"])([^\'\`\"]##)([\'\`\"])(*) ]]; then
|
||
local -A map=( \` bapo \' apo \" quo
|
||
x\` baps x\' aps x\" quos )
|
||
local openq=$match[2] str=$match[3] closeq=$match[4] RST=$ZINIT[col-rst]
|
||
REPLY=$match[1]$ZINIT[col-$map[$openq]]$openq$RST$ZINIT[col-$map[x$openq]]$str$RST$ZINIT[col-$map[$closeq]]$closeq$RST$match[5]
|
||
fi
|
||
in=$rest
|
||
out+=${spaces//$'\n'/$'\013\015'}$REPLY
|
||
done
|
||
# Restore regular, not non-breaking (0xa0) spaces
|
||
REPLY=${out//$'\u00a0'/ }
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-formatter-pid [[[
|
||
.zinit-formatter-pid() {
|
||
builtin emulate -L zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
|
||
# Save whitespace location
|
||
local pbz=${(M)1##(#s)[[:space:]]##}
|
||
local kbz=${(M)1%%[[:space:]]##(#e)}
|
||
# trim whitespace
|
||
1=${1//((#s)[[:space:]]##|[[:space:]]##(#e))/}
|
||
|
||
((${+functions[.zinit-first]})) || source ${ZINIT[BIN_DIR]}/zinit-side.zsh
|
||
.zinit-any-colorify-as-uspl2 "$1";
|
||
|
||
# Replace at least one character with an unbreakable space, because
|
||
# due to implementation problems, marginal whitespace is lost ...
|
||
pbz=${pbz/[[:blank:]]/ }
|
||
local kbz_rev="${(j::)${(@Oas::)kbz}}"
|
||
kbz="${(j::)${(@Oas::)${kbz_rev/[[:blank:]]/ }}}"
|
||
|
||
# Re-add whitespace
|
||
REPLY=$pbz$REPLY$kbz
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-formatter-bar [[[
|
||
.zinit-formatter-bar() {
|
||
.zinit-formatter-bar-util ─ bar
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-formatter-th-bar [[[
|
||
.zinit-formatter-th-bar() {
|
||
.zinit-formatter-bar-util ━ th-bar
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-formatter-bar-util [[[
|
||
.zinit-formatter-bar-util() {
|
||
if [[ $LANG == (#i)*utf-8* ]]; then
|
||
ch=$1
|
||
else
|
||
ch=-
|
||
fi
|
||
|
||
REPLY=$ZINIT[col-$2]${(pl:COLUMNS-1::$ch:):-}$ZINIT[col-rst]
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-formatter-url [[[
|
||
.zinit-formatter-url() {
|
||
builtin emulate -LR zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
# 1:proto 3:domain/5:start 6:end-of-it 7:no-dot-domain 9:file-path
|
||
if [[ $1 = (#b)([^:]#)(://|::)((([[:alnum:]._+-]##).([[:alnum:]_+-]##))|([[:alnum:].+_-]##))(|/(*)) ]] {
|
||
# The advanced coloring if recognized the format…
|
||
match[9]=${match[9]//\//"%F{227}%B"/"%F{81}%b"}
|
||
if [[ -n $match[4] ]]; then
|
||
REPLY="$(builtin print -Pr -- %F{220}$match[1]%F{227}$match[2]\
|
||
%B%F{82}$match[5]\
|
||
%B%F{227}.\
|
||
%B%F{183}$match[6]%f%b)" # … this ·case· ends at: trailing component of the with-dot domain …
|
||
else
|
||
REPLY="$(builtin print -Pr -- %F{220}$match[1]%F{227}$match[2]\
|
||
%B%F{82}$match[7]%f%b)" # … this ·case· ends at: no-dot domain …
|
||
fi
|
||
# Is there any file-path part in the URL?
|
||
if [[ -n $match[9] ]]; then
|
||
REPLY+="$(print -Pr -- \
|
||
%F{227}%B/%F{81}%b$match[9]%f%b)" # … append it. This ends the URL.
|
||
fi
|
||
#endif
|
||
} else {
|
||
# …revert to the basic if not…
|
||
REPLY=$ZINIT[col-url]$1$ZINIT[col-rst]
|
||
}
|
||
} # ]]]
|
||
|
||
# FUNCTION: .zinit-main-message-formatter [[[
|
||
.zinit-main-message-formatter() {
|
||
if [[ -z $1 && -z $2 && -z $3 ]]; then
|
||
REPLY=""
|
||
return
|
||
fi
|
||
local append influx in_prepend
|
||
if [[ $2 == (b|u|it|st|nb|nu|nit|nst) ]]; then
|
||
# Code repetition to preserve any leading/trailing whitespace
|
||
# and to allow accumulation of this code with others.
|
||
append=$ZINIT[col-$2]
|
||
elif [[ $2 == (…|ndsh|mdsh|mmdsh|-…|lr|) || -z $2 || -z $ZINIT[col-$2] ]]; then
|
||
# Resume previous escape code, if one is present.
|
||
if [[ $ZINIT[__last-formatter-code] != (…|ndsh|mdsh|mmdsh|-…|lr|rst|nl|) ]]; then
|
||
in_prepend=$ZINIT[col-$ZINIT[__last-formatter-code]]
|
||
influx=$ZINIT[col-$ZINIT[__last-formatter-code]]
|
||
fi
|
||
# Otherwise no action - only copy of this code without color.
|
||
else
|
||
# End of escaping logic
|
||
append=$ZINIT[col-rst]
|
||
fi
|
||
|
||
# Construct the text.
|
||
REPLY=$in_prepend${ZINIT[col-$2]:-$1}$influx$3$append
|
||
|
||
# Replace new lines with characters that work the same but are not
|
||
# deleted in the substitution $ (...) - vertical tab 0xB <-> 13 in the system
|
||
# octagonal connected back carriage (015).
|
||
local nl=$'\n' vertical=$'\013' carriager=$'\015'
|
||
REPLY=${REPLY//$nl/$vertical$carriager}
|
||
|
||
# REPLY+="x(${3}…)"
|
||
} # ]]]
|
||
|
||
# FUNCTION: +zi-log [[[
|
||
# Logging function
|
||
+zi-log() {
|
||
builtin emulate -LR zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
local opt msg
|
||
[[ $1 = -* ]] && { local opt=$1; shift; }
|
||
|
||
ZINIT[__last-formatter-code]=
|
||
msg=${${(j: :)${@:#--}}//\%/%%}
|
||
|
||
if [[ -z $ZINIT[DEBUG] ]] && [[ "$msg" = (#s){dbg}* ]]; then
|
||
return
|
||
fi
|
||
|
||
# First try a dedicated formatter, marking its empty output with ←→, then
|
||
# the general formatter and in the end filter-out the ←→ from the message.
|
||
msg=${${msg//(#b)(([\\]|(%F))([\{]([^\}]##)[\}])|([\{]([^\}]##)[\}])([^\%\{\\]#))/\
|
||
${match[4]:+${${match[3]:-$ZINIT[col-${ZINIT[__last-formatter-code]}]}:#%F}}$match[3]$match[4]\
|
||
${${functions[.zinit-formatter-$match[7]]:+\
|
||
${$(.zinit-formatter-$match[7] "$match[8]"; builtin print -rn -- $REPLY):-←→}}:-\
|
||
$(.zinit-main-message-formatter "$match[6]" "$match[7]" "$match[8]"; \
|
||
builtin print -rn -- "$REPLY"
|
||
)${${ZINIT[__last-formatter-code]::=${${${match[7]:#(…|ndsh|mdsh|mmdsh|-…|lr)}:+\
|
||
$match[7]}:-${ZINIT[__last-formatter-code]}}}:+}}}//←→}
|
||
|
||
[[ -z $msg ]] && return
|
||
|
||
# Reset color attributes at the end of the message
|
||
msg=$msg$ZINIT[col-rst]
|
||
# Output the processed message:
|
||
builtin print -Pr ${opt:#--} -- $msg
|
||
|
||
# Needed to correctly end a message with {nl}.
|
||
if [[ -n ${opt:#*n*} || -z $opt ]]; then
|
||
print -n $'\015'
|
||
fi
|
||
} # ]]]
|
||
# FUNCTION: +zinit-message [[[
|
||
# Wrapper function to maintain backward compatibility
|
||
+zinit-message(){
|
||
+zi-log $@
|
||
} # ]]]
|
||
|
||
# FUNCTION: +zinit-prehelp-usage-message [[[
|
||
+zinit-prehelp-usage-message() {
|
||
builtin emulate -LR zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
local cmd=$1 allowed=$2 sep="$ZINIT[col-msg2], $ZINIT[col-ehi]" \
|
||
sep2="$ZINIT[col-msg2], $ZINIT[col-opt]" bcol
|
||
|
||
# -h/--help given?
|
||
if (( OPTS[opt_-h,--help] )) {
|
||
# Yes – a help message:
|
||
+zi-log "{lhi}HELP FOR {apo}\`{cmd}$cmd{apo}\`{lhi} subcommand {mdsh}" \
|
||
"the available {b-lhi}options{ehi}:{rst}"
|
||
local opt
|
||
for opt ( ${(kos:|:)allowed} ) {
|
||
[[ $opt == --* ]] && continue
|
||
local msg=${___opt_map[$opt]#*:} txt=${___opt_map[(r)opt_$opt,--[^:]##]}
|
||
if [[ $msg == *":["* ]] {
|
||
msg=${${(MS)msg##$cmd:\[[^]]##}:-${(MS)msg##\*:\[[^]]##}}
|
||
msg=${msg#($cmd|\*):\[}
|
||
}
|
||
local pre_msg=`+zi-log -n {opt}${(r:14:)${txt#opt_}}`
|
||
+zi-log ${(r:35:: :)pre_msg}{rst}{ehi}→{rst}" $msg"
|
||
}
|
||
} elif [[ -n $allowed ]] {
|
||
shift 2
|
||
# No – an error message:
|
||
+zi-log "{b}{u-warn}ERROR{b-warn}:{rst}{msg2} Incorrect options given{ehi}:" \
|
||
"${(Mpj:$sep:)@:#-*}{rst}{msg2}. Allowed for the subcommand{ehi}:{rst}" \
|
||
"{apo}\`{cmd}$cmd{apo}\`{msg2} are{ehi}:{rst}" \
|
||
"{nl} {opt}${allowed//\|/$sep2}{msg2}."
|
||
} else {
|
||
local -a cmds
|
||
cmds=( load snippet update delete )
|
||
local bcol="{$cmd}" sep="${ZINIT[col-rst]}${ZINIT[col-$cmd]}\`, \`${ZINIT[col-cmd]}"
|
||
+zi-log "$bcol(it should be one of, e.g.{ehi}:" \
|
||
"{nb}$bcol\`{cmd}${(pj:$sep:)cmds}$bcol\`," \
|
||
"{cmd}{…}$bcol, e.g.{ehi}: {nb}$bcol\`{lhi}zinit {b}{cmd}load" \
|
||
"{pid}username/reponame$bcol\`) or a {b}{hi}for{nb}$bcol-based" \
|
||
"command body (i.e.{ehi}:{rst}$bcol e.g.{ehi}: {rst}$bcol\`{lhi}zinit" \
|
||
"{…}{b}ice-spec{nb}{…} {hi}for{nb}{lhi} {…}({b}plugin" \
|
||
"{nb}or{b} snippet) {pname}ID-1 ID-2 {-…} {lhi}{…}$bcol\`)." \
|
||
"See \`{cmd}help$bcol\` for a more detailed usage information and" \
|
||
"the list of the {cmd}subcommands$bcol.{rst}"
|
||
}
|
||
} # ]]]
|
||
# FUNCTION: .zinit-parse-opts [[[
|
||
.zinit-parse-opts() {
|
||
builtin emulate -LR zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
reply=( "${(@)${@[2,-1]//([ $'\t']##|(#s))(#b)(${(~j.|.)${(@s.|.)___opt_map[$1]}})(#B)([ $'\t']##|(#e))/${OPTS[${___opt_map[${match[1]}]%%:*}]::=1}ß←↓→}:#1ß←↓→}" )
|
||
} # ]]]
|
||
|
||
# Ice support
|
||
|
||
# FUNCTION: .zinit-ice [[[
|
||
# Parses ICE specification, puts the result into ICE global hash.
|
||
# The ice-spec is valid for next command only (i.e. it "melts"), but
|
||
# it can then stick to plugin and activate e.g. at update.
|
||
.zinit-ice() {
|
||
builtin setopt localoptions noksharrays extendedglob warncreateglobal typesetsilent noshortloops
|
||
integer retval
|
||
local bit exts="${(j:|:)${(@)${(@Akons:|:)${ZINIT_EXTS[ice-mods]//\'\'/}}/(#s)<->-/}}"
|
||
for bit; do
|
||
[[ $bit = (#b)(--|)(${~ZINIT[ice-list]}${~exts})(*) ]] && ZINIT_ICES[${match[2]}]+="${ZINIT_ICES[${match[2]}]:+;}${match[3]#(:|=)}" || break
|
||
retval+=1
|
||
done
|
||
[[ ${ZINIT_ICES[as]} = program ]] && ZINIT_ICES[as]=command
|
||
[[ -n ${ZINIT_ICES[on-update-of]} ]] && ZINIT_ICES[subscribe]="${ZINIT_ICES[subscribe]:-${ZINIT_ICES[on-update-of]}}"
|
||
[[ -n ${ZINIT_ICES[pick]} ]] && ZINIT_ICES[pick]="${ZINIT_ICES[pick]//\$ZPFX/${ZPFX%/}}"
|
||
if (( $+ZINIT_ICES[build] )); then
|
||
+zi-log -- "{dbg} {ice}build{rst}: setting configure & make ices"
|
||
ZINIT_ICES[configure]=
|
||
ZINIT_ICES[make]=
|
||
fi
|
||
if (( $+ZINIT_ICES[configure] || $+ZINIT_ICES[cmake] || $+ZINIT_ICES[make] )); then
|
||
ZINIT_ICES[null]=
|
||
fi
|
||
(( $+ZINIT_ICES[configure] )) && ZINIT_ICES[configure]="${ZINIT_ICES[configure]}"
|
||
(( $+ZINIT_ICES[make] )) && ZINIT_ICES[make]="${ZINIT_ICES[make]:-install}"
|
||
.zinit-validate-ice
|
||
return retval
|
||
} # ]]]
|
||
# FUNCTION: .zinit-validate-ice [[[
|
||
# Validates ice values at parse time.
|
||
# Warns (not errors) about invalid values — behavior is unchanged.
|
||
.zinit-validate-ice() {
|
||
builtin setopt localoptions noksharrays extendedglob typesetsilent noshortloops
|
||
if (( $+ZINIT_ICES[as] )) && [[ -n ${ZINIT_ICES[as]} ]]; then
|
||
case ${ZINIT_ICES[as]} in
|
||
(command|program|null|completion) ;;
|
||
(*)
|
||
+zi-log "{warn}Warning{b-warn}:{rst} {ice}as{rst} ice received invalid" \
|
||
"value {apo}\`{data}${ZINIT_ICES[as]}{apo}\`{rst}." \
|
||
"Expected one of: {data2}null{rst}, {data2}command{rst}," \
|
||
"{data2}program{rst}, {data2}completion{rst}."
|
||
;;
|
||
esac
|
||
fi
|
||
if (( $+ZINIT_ICES[wait] )) && [[ -n ${ZINIT_ICES[wait]} ]]; then
|
||
local w="${ZINIT_ICES[wait]#\!}"
|
||
w="${w%%.[0-9]##}"
|
||
local suffix="${w##[0-9]##}"
|
||
if [[ ${w%%[^0-9]*} = <-> && -n $suffix && $suffix != [abc] ]]; then
|
||
+zi-log "{warn}Warning{b-warn}:{rst} {ice}wait{rst} ice received invalid" \
|
||
"suffix letter {apo}\`{data}${suffix}{apo}\`{rst}." \
|
||
"Expected one of: {data2}a{rst}, {data2}b{rst}, {data2}c{rst}, or none."
|
||
fi
|
||
fi
|
||
if (( $+ZINIT_ICES[depth] )) && [[ -n ${ZINIT_ICES[depth]} ]]; then
|
||
if [[ ${ZINIT_ICES[depth]} != <1-> ]]; then
|
||
+zi-log "{warn}Warning{b-warn}:{rst} {ice}depth{rst} ice received invalid" \
|
||
"value {apo}\`{data}${ZINIT_ICES[depth]}{apo}\`{rst}." \
|
||
"Expected a positive integer."
|
||
fi
|
||
fi
|
||
} # ]]]
|
||
# FUNCTION: .zinit-pack-ice [[[
|
||
# Remembers all ice-mods, assigns them to concrete plugin. Ice spec
|
||
# is in general forgotten for second-next command (i.e., ice melts quickly), however they
|
||
# glue to the object (plugin or snippet) mentioned in the next command for later use with (e.g. 'zinit update ...').
|
||
.zinit-pack-ice() {
|
||
ZINIT_SICE[$1${1:+${2:+/}}$2]+="${(j: :)${(qkv)ICE[@]}} "
|
||
ZINIT_SICE[$1${1:+${2:+/}}$2]="${ZINIT_SICE[$1${1:+${2:+/}}$2]# }"
|
||
return 0
|
||
} # ]]]
|
||
# FUNCTION: .zinit-load-ices [[[
|
||
.zinit-load-ices() {
|
||
local id_as="$1" ___key ___path
|
||
local -a ice_order
|
||
ice_order=(
|
||
${(As:|:)ZINIT[ice-list]}
|
||
${(@)${(A@kons:|:)${ZINIT_EXTS[ice-mods]//\'\'/}}/(#s)<->-/}
|
||
)
|
||
___path="${ZINIT[PLUGINS_DIR]}/${id_as//\//---}"/._zinit
|
||
# TODO: snippets dir computation
|
||
if [[ ! -d $___path ]] {
|
||
if ! .zinit-get-object-path snippet "${id_as//\//---}"; then
|
||
return 1
|
||
fi
|
||
___path="$REPLY"/._zinit
|
||
}
|
||
for ___key ( "${ice_order[@]}" ) {
|
||
(( ${+ICE[$___key]} )) && [[ ${ICE[$___key]} != +* ]] && continue
|
||
[[ -e $___path/$___key ]] && ICE[$___key]="$(<$___path/$___key)"
|
||
}
|
||
[[ -n ${ICE[on-update-of]} ]] && ICE[subscribe]="${ICE[subscribe]:-${ICE[on-update-of]}}"
|
||
[[ ${ICE[as]} = program ]] && ICE[as]=command
|
||
[[ -n ${ICE[pick]} ]] && ICE[pick]="${ICE[pick]//\$ZPFX/${ZPFX%/}}"
|
||
|
||
return 0
|
||
} # ]]]
|
||
# FUNCTION: .zinit-setup-params [[[
|
||
.zinit-setup-params() {
|
||
builtin emulate -LR zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
reply=( ${(@)${(@s.;.)ICE[param]}/(#m)*/${${MATCH%%(-\>|→|=\>)*}//((#s)[[:space:]]##|[[:space:]]##(#e))}${${(M)MATCH#*(-\>|→|=\>)}:+\=${${MATCH#*(-\>|→|=\>)}//((#s)[[:space:]]##|[[:space:]]##(#e))}}} )
|
||
(( ${#reply} )) && return 0 || return 1
|
||
} # ]]]
|
||
|
||
#
|
||
# Turbo.
|
||
#
|
||
|
||
# FUNCTION: .zinit-run-task [[[
|
||
# A backend, worker function of .zinit-scheduler. It obtains the tasks
|
||
# index and a few of its properties (like the type: plugin, snippet,
|
||
# service plugin, service snippet) and executes it first checking for
|
||
# additional conditions (like non-numeric wait'' ice).
|
||
#
|
||
# $1 - current pass: 1 or 2
|
||
# $2 - time assigned to the task
|
||
# $3 - type: plugin, service plugin, service snippet, snippet
|
||
# $4 - tasks index in the ZINIT[WAIT_ICE_...] fields
|
||
# $5 - mode: load, light
|
||
# $6 - details: alias name (derived from id-as''), plugin-spec, or snippet URL
|
||
.zinit-run-task() {
|
||
local ___pass="$1" ___t="$2" ___tpe="$3" ___idx="$4" ___mode="$5" ___id="${(Q)6}" ___opt="${(Q)7}" ___action ___s=1 ___retval=0
|
||
|
||
local -A ICE ZINIT_ICE
|
||
ICE=( "${(@Q)${(z@)ZINIT[WAIT_ICE_${___idx}]}}" )
|
||
ZINIT_ICE=( "${(kv)ICE[@]}" )
|
||
|
||
local ___id_as=${ICE[id-as]:-$___id}
|
||
|
||
if [[ $___pass = 1 && ${${ICE[wait]#\!}%%[^0-9]([^0-9]|)([^0-9]|)([^0-9]|)} = <-> ]]; then
|
||
___action="${(M)ICE[wait]#\!}load"
|
||
elif [[ $___pass = 1 && -n ${ICE[wait]#\!} ]] && { eval "${ICE[wait]#\!}" || [[ $(( ___s=0 )) = 1 ]]; }; then
|
||
___action="${(M)ICE[wait]#\!}load"
|
||
elif [[ -n ${ICE[load]#\!} && -n $(( ___s=0 )) && $___pass = 3 && -z ${ZINIT_REGISTERED_PLUGINS[(r)$___id_as]} ]] && eval "${ICE[load]#\!}"; then
|
||
___action="${(M)ICE[load]#\!}load"
|
||
elif [[ -n ${ICE[unload]#\!} && -n $(( ___s=0 )) && $___pass = 2 && -n ${ZINIT_REGISTERED_PLUGINS[(r)$___id_as]} ]] && eval "${ICE[unload]#\!}"; then
|
||
___action="${(M)ICE[unload]#\!}remove"
|
||
elif [[ -n ${ICE[subscribe]#\!} && -n $(( ___s=0 )) && $___pass = 3 ]] && \
|
||
{ local -a fts_arr
|
||
eval "fts_arr=( ${ICE[subscribe]}(DNms-$(( EPOCHSECONDS -
|
||
ZINIT[fts-${ICE[subscribe]}] ))) ); (( \${#fts_arr} ))" && \
|
||
{ ZINIT[fts-${ICE[subscribe]}]="$EPOCHSECONDS"; ___s=${+ICE[once]}; } || \
|
||
(( 0 ))
|
||
}
|
||
then
|
||
___action="${(M)ICE[subscribe]#\!}load"
|
||
fi
|
||
|
||
if [[ $___action = *load ]]; then
|
||
if [[ $___tpe = p* ]]; then
|
||
.zinit-load "${(@)=___id}" "" "$___mode" ${___tpe#p}; (( ___retval += $? ))
|
||
elif [[ $___tpe = s* ]]; then
|
||
.zinit-load-snippet $___opt "$___id" "" ${___tpe#s}; (( ___retval += $? ))
|
||
fi
|
||
if [[ $___tpe = p1 || $___tpe = s1 ]]; then
|
||
(( ${+functions[.zinit-service]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-additional.zsh"
|
||
zpty -b "${___id//\//:} / ${ICE[service]}" '.zinit-service '"${(M)___tpe#?}"' "$___mode" "$___id"'
|
||
fi
|
||
(( ${+ICE[silent]} == 0 && ${+ICE[lucid]} == 0 && ___retval == 0 )) && zle && zle -M "Loaded $___id"
|
||
elif [[ $___action = *remove ]]; then
|
||
(( ${+functions[.zinit-confirm]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-autoload.zsh" || return 1
|
||
[[ $___tpe = p ]] && .zinit-unload "$___id_as" "" -q
|
||
(( ${+ICE[silent]} == 0 && ${+ICE[lucid]} == 0 && ___retval == 0 )) && zle && zle -M "Unloaded $___id_as"
|
||
fi
|
||
|
||
[[ ${REPLY::=$___action} = \!* ]] && zle && zle .reset-prompt
|
||
|
||
return ___s
|
||
} # ]]]
|
||
# FUNCTION: .zinit-submit-turbo [[[
|
||
# If `zinit load`, `zinit light` or `zinit snippet` will be
|
||
# preceded with 'wait', 'load', 'unload' or 'on-update-of'/'subscribe'
|
||
# ice-mods then the plugin or snipped is to be loaded in turbo-mode,
|
||
# and this function adds it to internal data structures. @zinit-scheduler uses the data to
|
||
# create load or unload tasks.
|
||
.zinit-submit-turbo() {
|
||
local tpe="$1" mode="$2" opt_uspl2="$3" opt_plugin="$4"
|
||
|
||
ICE[wait]="${ICE[wait]%%.[0-9]##}"
|
||
ZINIT[WAIT_IDX]=$(( ${ZINIT[WAIT_IDX]:-0} + 1 ))
|
||
ZINIT[WAIT_ICE_${ZINIT[WAIT_IDX]}]="${(j: :)${(qkv)ICE[@]}}"
|
||
ZINIT[fts-${ICE[subscribe]}]="${ICE[subscribe]:+$EPOCHSECONDS}"
|
||
|
||
[[ $tpe = s* ]] && \
|
||
local id="${${opt_plugin:+$opt_plugin}:-$opt_uspl2}" || \
|
||
local id="${${opt_plugin:+$opt_uspl2${${opt_uspl2:#%*}:+/}$opt_plugin}:-$opt_uspl2}"
|
||
|
||
if [[ ${${ICE[wait]}%%[^0-9]([^0-9]|)([^0-9]|)([^0-9]|)} = (\!|.|)<-> ]]; then
|
||
ZINIT_TASKS+=( "$EPOCHSECONDS+${${ICE[wait]#(\!|.)}%%[^0-9]([^0-9]|)([^0-9]|)([^0-9]|)}+${${${(M)ICE[wait]%a}:+1}:-${${${(M)ICE[wait]%b}:+2}:-${${${(M)ICE[wait]%c}:+3}:-1}}} $tpe ${ZINIT[WAIT_IDX]} ${mode:-_} ${(q)id} ${opt_plugin:+${(q)opt_uspl2}}" )
|
||
elif [[ -n ${ICE[wait]}${ICE[load]}${ICE[unload]}${ICE[subscribe]} ]]; then
|
||
ZINIT_TASKS+=( "${${ICE[wait]:+0}:-1}+0+1 $tpe ${ZINIT[WAIT_IDX]} ${mode:-_} ${(q)id} ${opt_plugin:+${(q)opt_uspl2}}" )
|
||
fi
|
||
} # ]]]
|
||
# FUNCTION: -zinit_scheduler_add_sh [[[
|
||
# Copies task into ZINIT_RUN array, called when a task timeouts.
|
||
# A small function ran from pattern in /-substitution as a math
|
||
# function.
|
||
-zinit_scheduler_add_sh() {
|
||
local idx="$1" in_wait="$___ar2" in_abc="$___ar3" ver_wait="$___ar4" ver_abc="$___ar5"
|
||
if [[ ( $in_wait = $ver_wait || $in_wait -ge 4 ) && $in_abc = $ver_abc ]]; then
|
||
ZINIT_RUN+=( "${ZINIT_TASKS[$idx]}" )
|
||
return 1
|
||
else
|
||
return idx
|
||
fi
|
||
} # ]]]
|
||
# FUNCTION: @zinit-scheduler [[[
|
||
# Searches for timeout tasks, executes them. Theres an array of tasks
|
||
# waiting for execution, this scheduler manages them, detects which ones
|
||
# should be run at current moment, decides to remove (or not) them from
|
||
# the array after execution.
|
||
#
|
||
# $1 - if "following", then it is non-first (second and more)
|
||
# invocation of the scheduler; this results in chain of 'sched'
|
||
# invocations that results in repetitive @zinit-scheduler activity.
|
||
#
|
||
# if "burst", then all tasks are marked timeout and executed one
|
||
# by one; this is handy if e.g. a docker image starts up and
|
||
# needs to install all turbo-mode plugins without any hesitation
|
||
# (delay), i.e. "burst" allows to run package installations from
|
||
# script, not from prompt.
|
||
@zinit-scheduler() {
|
||
integer ___ret="${${ZINIT[lro-data]%:*}##*:}"
|
||
# lro stands for lastarg-retval-option.
|
||
[[ $1 = following ]] && sched +1 'ZINIT[lro-data]="$_:$?:${options[printexitvalue]}"; @zinit-scheduler following "${ZINIT[lro-data]%:*:*}"'
|
||
[[ -n $1 && $1 != (following*|burst) ]] && { local THEFD="$1"; zle -F "$THEFD"; exec {THEFD}<&-; }
|
||
[[ $1 = burst ]] && local -h EPOCHSECONDS=$(( EPOCHSECONDS+10000 ))
|
||
ZINIT[START_TIME]="${ZINIT[START_TIME]:-$EPOCHREALTIME}"
|
||
|
||
integer ___t=EPOCHSECONDS ___i correct
|
||
local -a match mbegin mend reply
|
||
local MATCH REPLY AFD; integer MBEGIN MEND
|
||
|
||
[[ -o ksharrays ]] && correct=1
|
||
|
||
if [[ -n $1 ]] {
|
||
if [[ ${#ZINIT_RUN} -le 1 || $1 = following ]] {
|
||
() {
|
||
builtin emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob
|
||
# Example entry:
|
||
# 1531252764+2+1 p 18 light zdharma/zsh-diff-so-fancy
|
||
#
|
||
# This either doesnt change ZINIT_TASKS entry - when
|
||
# ___i is used in the ternary expression, or replaces
|
||
# an entry with "<no-data>", i.e. ZINIT_TASKS[1] entry.
|
||
integer ___idx1 ___idx2
|
||
local ___ar2 ___ar3 ___ar4 ___ar5
|
||
for (( ___idx1 = 0; ___idx1 <= 4; ___idx1 ++ )) {
|
||
for (( ___idx2 = 1; ___idx2 <= (___idx >= 4 ? 1 : 3); ___idx2 ++ )) {
|
||
# The following substitution could be just (well, 'just'..) this:
|
||
#
|
||
# ZINIT_TASKS=( ${ZINIT_TASKS[@]/(#b)([0-9]##)+([0-9]##)+([1-3])(*)/
|
||
# ${ZINIT_TASKS[$(( (${match[1]}+${match[2]}) <= $___t ?
|
||
# zinit_scheduler_add(___i++, ${match[2]},
|
||
# ${(M)match[3]%[1-3]}, ___idx1, ___idx2) : ___i++ ))]}} )
|
||
#
|
||
# However, there's a severe bug in Zsh <= 5.3.1 - use of the period
|
||
# (,) is impossible inside ${..//$arr[$(( ... ))]}.
|
||
___i=2
|
||
|
||
ZINIT_TASKS=( ${ZINIT_TASKS[@]/(#b)([0-9]##)+([0-9]##)+([1-3])(*)/${ZINIT_TASKS[
|
||
$(( (___ar2=${match[2]}+1) ? (
|
||
(___ar3=${(M)match[3]%[1-3]}) ? (
|
||
(___ar4=___idx1+1) ? (
|
||
(___ar5=___idx2) ? (
|
||
(${match[1]}+${match[2]}) <= $___t ?
|
||
zinit_scheduler_add(___i++) : ___i++ )
|
||
: 1 )
|
||
: 1 )
|
||
: 1 )
|
||
: 1 ))]}} )
|
||
ZINIT_TASKS=( "<no-data>" ${ZINIT_TASKS[@]:#<no-data>} )
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
add-zsh-hook -d -- precmd @zinit-scheduler
|
||
add-zsh-hook -- chpwd @zinit-scheduler
|
||
() {
|
||
builtin emulate -L zsh ${=${options[xtrace]:#off}:+-o xtrace}
|
||
builtin setopt extendedglob
|
||
# No "+" in this pattern, it will match only "1531252764"
|
||
# in "1531252764+2" and replace it with current time.
|
||
ZINIT_TASKS=( ${ZINIT_TASKS[@]/(#b)([0-9]##)(*)/$(( ${match[1]} <= 1 ? ${match[1]} : ___t ))${match[2]}} )
|
||
}
|
||
# Theres a bug in Zsh: first sched call would not be issued
|
||
# until a key-press, if "sched +1 ..." would be called inside
|
||
# zle -F handler. So its done here, in precmd-handle code.
|
||
sched +1 'ZINIT[lro-data]="$_:$?:${options[printexitvalue]}"; @zinit-scheduler following ${ZINIT[lro-data]%:*:*}'
|
||
|
||
AFD=13371337 # for older Zsh + noclobber option
|
||
exec {AFD}< <(LANG=C command sleep 0.002; builtin print run;)
|
||
command true # workaround a Zsh bug, see: https://www.zsh.org/mla/workers/2018/msg00966.html
|
||
zle -F "$AFD" @zinit-scheduler
|
||
}
|
||
|
||
local ___task ___idx=0 ___count=0 ___idx2
|
||
# All wait'' objects.
|
||
for ___task ( "${ZINIT_RUN[@]}" ) {
|
||
.zinit-run-task 1 "${(@z)___task}" && ZINIT_TASKS+=( "$___task" )
|
||
if [[ $(( ++___idx, ___count += ${${REPLY:+1}:-0} )) -gt 0 && $1 != burst ]] {
|
||
AFD=13371337 # for older Zsh + noclobber option
|
||
exec {AFD}< <(LANG=C command sleep 0.0002; builtin print run;)
|
||
command true
|
||
# The $? and $_ will be left unchanged automatically by Zsh.
|
||
zle -F "$AFD" @zinit-scheduler
|
||
break
|
||
}
|
||
}
|
||
# All unload'' objects.
|
||
for (( ___idx2=1; ___idx2 <= ___idx; ++ ___idx2 )) {
|
||
.zinit-run-task 2 "${(@z)ZINIT_RUN[___idx2-correct]}"
|
||
}
|
||
# All load'' & subscribe'' objects.
|
||
for (( ___idx2=1; ___idx2 <= ___idx; ++ ___idx2 )) {
|
||
.zinit-run-task 3 "${(@z)ZINIT_RUN[___idx2-correct]}"
|
||
}
|
||
ZINIT_RUN[1-correct,___idx-correct]=()
|
||
|
||
[[ ${ZINIT[lro-data]##*:} = on ]] && return 0 || return ___ret
|
||
} # ]]]
|
||
|
||
#
|
||
# Exposed functions.
|
||
#
|
||
|
||
# FUNCTION: zinit [[[
|
||
# Entrypoint function directly exposed to user, consumes subcommands with respective arguments,
|
||
# and completion.
|
||
zinit() {
|
||
local -A ICE ZINIT_ICE
|
||
ICE=( "${(kv)ZINIT_ICES[@]}" )
|
||
ZINIT_ICE=( "${(kv)ICE[@]}" )
|
||
ZINIT_ICES=()
|
||
|
||
integer ___retval ___retval2 ___correct
|
||
local -a match mbegin mend
|
||
local MATCH cmd ___q="\`" ___q2="'" IFS=$' \t\n\0'; integer MBEGIN MEND
|
||
|
||
# An annexs subcommand might use the reply vars.
|
||
match=( ${ZINIT_EXTS[(I)z-annex subcommand:$1]} )
|
||
if (( !${#match} )) {
|
||
local -a reply; local REPLY
|
||
}
|
||
|
||
[[ -o ksharrays ]] && ___correct=1
|
||
|
||
local -A ___opt_map OPTS
|
||
___opt_map=(
|
||
-q opt_-q,--quiet:"update:[Turn off almost-all messages from the {cmd}update{rst} operation {b-lhi}FOR the objects{rst} which don't have any {b-lhi}new version{rst} available.] *:[Turn off any (or: almost-any) messages from the operation.]"
|
||
--quiet opt_-q,--quiet
|
||
-v opt_-v,--verbose:"Turn on more messages from the operation."
|
||
--verbose opt_-v,--verbose
|
||
-r opt_-r,--reset:"Reset the repository before updating (or remove the files for single-file snippets and gh-r plugins)."
|
||
--reset opt_-r,--reset
|
||
-a opt_-a,--all:"delete:[Delete {hi}all{rst} plugins and snippets.] update:[Update {b-lhi}all{rst} plugins and snippets.]"
|
||
--all opt_-a,--all
|
||
-c opt_-c,--clean:"Delete {b-lhi}only{rst} the {b-lhi}currently-not loaded{rst} plugins and snippets."
|
||
--clean opt_-c,--clean
|
||
-y opt_-y,--yes:"Automatically confirm any yes/no prompts."
|
||
--yes opt_-y,--yes
|
||
-f opt_-f,--force:"Force new download of the snippet file."
|
||
--force opt_-f,--force
|
||
-p opt_-p,--parallel:"Turn on concurrent, multi-thread update (of all objects)."
|
||
--parallel opt_-p,--parallel
|
||
-s opt_-s,--snippets:"snippets:[Update only snippets (i.e.: skip updating plugins).] times:[Show times in seconds instead of milliseconds.]"
|
||
--snippets opt_-s,--snippets
|
||
-L opt_-l,--plugins:"Update only plugins (i.e.: skip updating snippets)."
|
||
--plugins opt_-l,--plugins
|
||
-h opt_-h,--help:"Show this help message."
|
||
--help opt_-h,--help
|
||
-u opt_-u,--urge:"Cause all the hooks like{ehi}:{rst} {ice}atpull{apo}''{rst}, {ice}cp{apo}''{rst}, etc. to execute even when there aren't any new commits {b}/{rst} any new version of the {b}{meta}gh-r{rst} file {b}/{rst} etc.{…} available for download {ehi}{lr}{rst} simulate a non-empty update."
|
||
--urge opt_-u,--urge
|
||
-n opt_-n,--no-pager:"Disable the use of the pager."
|
||
--no-pager opt_-n,--no-pager
|
||
-m opt_-m,--moments:"Show the {apo}*{b-lhi}moments{apo}*{rst} of object (i.e.: a plugin or snippet) loading time."
|
||
--moments opt_-m,--moments
|
||
-b opt_-b,--bindkeys:"Load in light mode, however do still track {cmd}bindkey{rst} calls (to allow remapping the keys bound)."
|
||
--bindkeys opt_-b,--bindkeys
|
||
-x opt_-x,--command:"Load the snippet as a {cmd}command{rst}, i.e.: add it to {var}\$PATH{rst} and set {b-lhi}+x{rst} on it."
|
||
--command opt_-x,--command
|
||
cdclear "--help|--quiet|-h|-q"
|
||
cdreplay "--help|--quiet|-h|-q"
|
||
delete "--all|--clean|--help|--quiet|--yes|-a|-c|-h|-q|-y"
|
||
env-whitelist "--help|--verbose|-h|-v"
|
||
light "--help|-b|-h"
|
||
snippet "--command|--force|--help|-f|-h|-x"
|
||
times "--help|-h|-m|-s"
|
||
self-update "--help|--quiet|-h|-q"
|
||
unload "--help|--quiet|-h|-q"
|
||
update "--all|--help|--no-pager|--parallel|--plugins|--quiet|--reset|--snippets|--urge|--verbose|-L|-a|-h|-n|-p|-q|-r|-s|-u|-v"
|
||
version ""
|
||
)
|
||
|
||
cmd="$1"
|
||
if [[ $cmd == (times|unload|env-whitelist|update|snippet|load|light|cdreplay|cdclear|self-update) ]]; then
|
||
if (( $@[(I)-*] || OPTS[opt_-h,--help] )); then
|
||
.zinit-parse-opts "$cmd" "$@"
|
||
if (( OPTS[opt_-h,--help] )); then
|
||
+zinit-prehelp-usage-message $cmd $___opt_map[$cmd] $@
|
||
return 1;
|
||
elif (( ${reply[(I)-*]} )); then
|
||
+zinit-prehelp-usage-message $cmd $___opt_map[$cmd] ${reply[@]}
|
||
return 1
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
reply=( ${ZINIT_EXTS[(I)z-annex subcommand:*]} )
|
||
|
||
[[ -n $1 && $1 != (${~ZINIT[cmds]}|${(~j:|:)reply[@]#z-annex subcommand:}) || $1 = (load|light|snippet) ]] && \
|
||
{
|
||
integer ___error
|
||
if [[ $1 = (load|light|snippet) ]] {
|
||
integer ___is_snippet
|
||
# Classic syntax -> simulate a call through the for-syntax.
|
||
() {
|
||
builtin setopt localoptions extendedglob
|
||
: ${@[@]//(#b)([ $'\t']##|(#s))(-b|--command|-f|--force)([ $'\t']##|(#e))/${OPTS[${match[2]}]::=1}}
|
||
} "$@"
|
||
builtin set -- "${@[@]:#(-b|--command|-f|--force)}"
|
||
[[ $1 = light && -z ${OPTS[(I)-b]} ]] && ICE[light-mode]=
|
||
[[ $1 = snippet ]] && ICE[is-snippet]= || ___is_snippet=-1
|
||
shift
|
||
|
||
ZINIT_ICES=( "${(kv)ICE[@]}" )
|
||
ICE=() ZINIT_ICE=()
|
||
1="${1:+@}${1#@}${2:+/$2}"
|
||
(( $# > 1 )) && { shift -p $(( $# - 1 )); }
|
||
[[ -z $1 ]] && {
|
||
+zi-log "Argument needed, try: {cmd}help."
|
||
return 1
|
||
}
|
||
} else {
|
||
.zinit-ice "$@"
|
||
___retval2=$?
|
||
local ___last_ice=${@[___retval2]}
|
||
shift ___retval2
|
||
if [[ $# -gt 0 && $1 != for ]] {
|
||
+zi-log -n "{b}{u-warn}ERROR{b-warn}:{rst} Unknown subcommand{ehi}:" \
|
||
"{apo}\`{cmd}$1{apo}\`{rst} "
|
||
+zinit-prehelp-usage-message rst
|
||
return 1
|
||
} elif (( $# == 0 )) {
|
||
___error=1
|
||
} else {
|
||
shift
|
||
}
|
||
}
|
||
integer ___had_wait
|
||
local ___id ___ehid ___etid ___key
|
||
local -a ___arr
|
||
ZINIT[annex-exposed-processed-IDs]=
|
||
if (( $# )) {
|
||
local -a ___ices
|
||
___ices=( "${(kv)ZINIT_ICES[@]}" )
|
||
ZINIT_ICES=()
|
||
while (( $# )) {
|
||
.zinit-ice "$@"
|
||
___retval2=$?
|
||
local ___last_ice=${@[___retval2]}
|
||
shift ___retval2
|
||
if [[ -n $1 ]] {
|
||
ICE=( "${___ices[@]}" "${(kv)ZINIT_ICES[@]}" )
|
||
ZINIT_ICE=( "${(kv)ICE[@]}" ) ZINIT_ICES=()
|
||
integer ___msgs=${+ICE[debug]}
|
||
(( ___msgs )) && +zi-log "{pre}zinit-main:{faint} Processing {pname}$1{faint}{…}{rst}"
|
||
|
||
# Delete up to the final space to get the previously-processed ID.
|
||
ZINIT[annex-exposed-processed-IDs]+="${___id:+ $___id}"
|
||
|
||
# Strip the ID-qualifier (`@') and GitHub domain from the ID.
|
||
___id="${${1#@}%%(///|//|/)}"
|
||
(( ___is_snippet == -1 )) && ___id="${___id#https://github.com/}"
|
||
|
||
# Effective handle-ID – the label under which the object
|
||
# will be identified / referred-to by Zinit.
|
||
___ehid="${ICE[id-as]:-$___id}"
|
||
|
||
# Effective remote-ID (i.e.: URL, GitHub username/repo,
|
||
# package name, etc.). teleid'' allows "overriding" of $1.
|
||
# In case of a package using teleid'', the value here
|
||
# is being took from the given ices, before disk-ices.
|
||
___etid="${ICE[teleid]:-$___id}"
|
||
|
||
if (( ${+ICE[pack]} )); then
|
||
___had_wait=${+ICE[wait]}
|
||
.zinit-load-ices "$___ehid"
|
||
# wait'' isn't possible via the disk-ices (for
|
||
# packages), only via the command's ice-spec.
|
||
[[ $___had_wait -eq 0 ]] && unset 'ICE[wait]'
|
||
fi
|
||
|
||
[[ ${ICE[id-as]} = (auto|) && ${+ICE[id-as]} == 1 ]] && ICE[id-as]="${___etid:t}"
|
||
|
||
integer ___is_snippet=${${(M)___is_snippet:#-1}:-0}
|
||
() {
|
||
builtin setopt localoptions extendedglob
|
||
if [[ $___is_snippet -ge 0 && ( -n ${ICE[is-snippet]+1} || $___etid = ((#i)(http(s|)|ftp(s|)):/|(${(~kj.|.)ZINIT_1MAP}))* ) ]] {
|
||
___is_snippet=1
|
||
}
|
||
} "$@"
|
||
|
||
local ___type=${${${(M)___is_snippet:#1}:+snippet}:-plugin}
|
||
reply=(
|
||
${(on)ZINIT_EXTS2[(I)zinit hook:before-load-pre <->]}
|
||
${(on)ZINIT_EXTS[(I)z-annex hook:before-load-<-> <->]}
|
||
${(on)ZINIT_EXTS2[(I)zinit hook:before-load-post <->]}
|
||
)
|
||
for ___key in "${reply[@]}"; do
|
||
___arr=( "${(Q)${(z@)ZINIT_EXTS[$___key]:-$ZINIT_EXTS2[$___key]}[@]}" )
|
||
"${___arr[5]}" "$___type" "$___id" "${ICE[id_as]}" \
|
||
"${(j: :)${(q)@[2,-1]}}" "${(j: :)${(qkv)___ices[@]}}" \
|
||
"${${___key##(zinit|z-annex) hook:}%% <->}" load
|
||
___retval2=$?
|
||
if (( ___retval2 )) {
|
||
# An error is actually only an odd return code.
|
||
___retval+=$(( ___retval2 & 1 ? ___retval2 : 0 ))
|
||
(( ___retval2 & 1 && $# )) && shift
|
||
|
||
# Override $@?
|
||
if (( ___retval2 & 2 )) {
|
||
local -a ___args
|
||
___args=( "${(@Q)${(@z)ZINIT[annex-before-load:new-@]}}" )
|
||
builtin set -- "${___args[@]}"
|
||
}
|
||
|
||
# Override $___ices?
|
||
if (( ___retval2 & 4 )) {
|
||
local -a ___new_ices
|
||
___new_ices=( "${(Q@)${(@z)ZINIT[annex-before-load:new-global-ices]}}" )
|
||
(( 0 == ${#___new_ices} % 2 )) && \
|
||
___ices=( "${___new_ices[@]}" ) || \
|
||
{ [[ ${ZINIT[MUTE_WARNINGS]} != (1|true|on|yes) ]] && \
|
||
+zi-log "{u-warn}Warning{b-warn}:{msg} Bad new-ices returned" \
|
||
"from the annex{ehi}:{rst} {annex}${___arr[3]}{msg}," \
|
||
"please file an issue report at:{url}" \
|
||
"https://github.com/zdharma-continuum/${___arr[3]}/issues/new{msg}.{rst}"
|
||
___ices=( ) ___retval+=7
|
||
}
|
||
}
|
||
continue 2
|
||
}
|
||
done
|
||
integer ___action_load=0 ___turbo=0
|
||
if [[ -n ${(M)${+ICE[wait]}:#1}${ICE[load]}${ICE[unload]}${ICE[service]}${ICE[subscribe]} ]] {
|
||
___turbo=1
|
||
}
|
||
|
||
if [[ -n ${ICE[trigger-load]} || \
|
||
( ${+ICE[wait]} == 1 &&
|
||
${ICE[wait]} = (\!|)(<->(a|b|c|)|) )
|
||
]] && (( !ZINIT[OPTIMIZE_OUT_DISK_ACCESSES]
|
||
)) {
|
||
if (( ___is_snippet > 0 )) {
|
||
.zinit-get-object-path snippet $___ehid
|
||
} else {
|
||
.zinit-get-object-path plugin $___ehid
|
||
}
|
||
(( $? )) && [[ ${zsh_eval_context[1]} = file ]] && { ___action_load=1; }
|
||
local ___object_path="$REPLY"
|
||
} elif (( ! ___turbo )) {
|
||
___action_load=1
|
||
reply=( 1 )
|
||
} else {
|
||
reply=( 1 )
|
||
}
|
||
|
||
if [[ ${reply[-1]} -eq 1 && -n ${ICE[trigger-load]} ]] {
|
||
() {
|
||
builtin setopt localoptions extendedglob
|
||
local ___mode
|
||
(( ___is_snippet > 0 )) && ___mode=snippet || ___mode="${${${ICE[light-mode]+light}}:-load}"
|
||
for MATCH ( ${(s.;.)ICE[trigger-load]} ) {
|
||
eval "${MATCH#!}() {
|
||
${${(M)MATCH#!}:+unset -f ${MATCH#!}}
|
||
local a b; local -a ices
|
||
# The wait'' ice is filtered-out.
|
||
for a b ( ${(qqkv@)${(kv@)ICE[(I)^(trigger-load|wait|light-mode)]}} ) {
|
||
ices+=( \"\$a\$b\" )
|
||
}
|
||
zinit ice \${ices[@]}; zinit $___mode ${(qqq)___id}
|
||
${${(M)MATCH#!}:+# Forward the call
|
||
eval ${MATCH#!} \$@}
|
||
}"
|
||
}
|
||
} "$@"
|
||
___retval+=$?
|
||
(( $# )) && shift
|
||
continue
|
||
}
|
||
|
||
if (( ${+ICE[if]} )) {
|
||
eval "${ICE[if]}" || { (( $# )) && shift; continue; };
|
||
}
|
||
for REPLY ( ${(s.;.)ICE[has]} ) {
|
||
(( ${+commands[$REPLY]} )) || \
|
||
{ (( $# )) && shift; continue 2; }
|
||
}
|
||
|
||
integer ___had_cloneonly=0
|
||
ICE[wait]="${${(M)${+ICE[wait]}:#1}:+${(M)ICE[wait]#!}${${ICE[wait]#!}:-0}}"
|
||
if (( ___action_load || !ZINIT[HAVE_SCHEDULER] )) {
|
||
if (( ___turbo && ZINIT[HAVE_SCHEDULER] )) {
|
||
___had_cloneonly=${+ICE[cloneonly]}
|
||
ICE[cloneonly]=""
|
||
}
|
||
|
||
(( ___is_snippet )) && \
|
||
local ___opt="${(k)OPTS[*]}" || \
|
||
local ___opt="${${ICE[light-mode]+light}:-${OPTS[(I)-b]:+light-b}}"
|
||
|
||
.zinit-load-object ${${${(M)___is_snippet:#1}:+snippet}:-plugin} $___id $___opt
|
||
integer ___last_retval=$?
|
||
___retval+=___last_retval
|
||
|
||
if (( ___turbo && !___had_cloneonly && ZINIT[HAVE_SCHEDULER] )) {
|
||
command rm -f $___object_path/._zinit/cloneonly
|
||
unset 'ICE[cloneonly]'
|
||
}
|
||
}
|
||
if (( ___turbo && ZINIT[HAVE_SCHEDULER] && 0 == ___last_retval )) {
|
||
ICE[wait]="${ICE[wait]:-${ICE[service]:+0}}"
|
||
if (( ___is_snippet > 0 )); then
|
||
ZINIT_SICE[$___ehid]=
|
||
.zinit-submit-turbo s${ICE[service]:+1} "" \
|
||
"$___id" "${(k)OPTS[*]}"
|
||
else
|
||
ZINIT_SICE[$___ehid]=
|
||
.zinit-submit-turbo p${ICE[service]:+1} \
|
||
"${${${ICE[light-mode]+light}}:-load}" \
|
||
"$___id" ""
|
||
fi
|
||
___retval+=$?
|
||
}
|
||
} else {
|
||
___error=1
|
||
}
|
||
(( $# )) && shift
|
||
___is_snippet=0
|
||
}
|
||
} else {
|
||
___error=1
|
||
}
|
||
|
||
if (( ___error )) {
|
||
() {
|
||
builtin emulate -LR zsh -o extendedglob ${=${options[xtrace]:#off}:+-o xtrace}
|
||
+zi-log -n "{u-warn}Error{b-warn}:{rst} No plugin or snippet ID given"
|
||
if [[ -n $___last_ice ]] {
|
||
+zi-log -n " (the last recognized ice was: {ice}"\
|
||
"${___last_ice/(#m)(${~ZINIT[ice-list]})/"{data}$MATCH"}{apo}''{rst}).{error}
|
||
You can try to prepend {apo}${___q}{lhi}@{apo}'{error} to the ID if the last ice is in fact a plugin.{rst}
|
||
{note}Note:{rst} The {apo}\`{ice}ice{apo}\`{rst} subcommand is now again required if not using the for-syntax"
|
||
}
|
||
+zi-log "."
|
||
}
|
||
return 2
|
||
} elif (( ! $# )) {
|
||
return ___retval
|
||
}
|
||
}
|
||
|
||
case "$1" in
|
||
(ice)
|
||
shift
|
||
.zinit-ice "$@"
|
||
;;
|
||
(cdreplay)
|
||
.zinit-compdef-replay "$2"; ___retval=$?
|
||
;;
|
||
(cdclear)
|
||
.zinit-compdef-clear "$2"
|
||
;;
|
||
((add-|)fpath)
|
||
.zinit-add-fpath "${@[2-correct,-1]}"
|
||
;;
|
||
(run)
|
||
.zinit-run "${@[2-correct,-1]}"
|
||
;;
|
||
(man)
|
||
man "${ZINIT[BIN_DIR]}/doc/zinit.1"
|
||
;;
|
||
(env-whitelist)
|
||
shift
|
||
.zinit-parse-opts env-whitelist "$@"
|
||
builtin set -- "${reply[@]}"
|
||
|
||
if (( $# == 0 )) {
|
||
ZINIT[ENV-WHITELIST]=
|
||
(( OPTS[opt_-v,--verbose] )) && +zi-log "{msg2}Cleared the parameter whitelist.{rst}"
|
||
} else {
|
||
ZINIT[ENV-WHITELIST]+="${(j: :)${(q-kv)@}} "
|
||
local ___sep="$ZINIT[col-msg2], $ZINIT[col-data2]"
|
||
(( OPTS[opt_-v,--verbose] )) && +zi-log "{msg2}Extended the parameter whitelist with: {data2}${(pj:$___sep:)@}{msg2}.{rst}"
|
||
}
|
||
;;
|
||
(*)
|
||
# Check if there is a z-annex registered for the subcommand.
|
||
reply=( ${ZINIT_EXTS[z-annex subcommand:${(q)1}]} )
|
||
(( ${#reply} )) && {
|
||
reply=( "${(Q)${(z@)reply[1]}[@]}" )
|
||
(( ${+functions[${reply[5]}]} )) && \
|
||
{ "${reply[5]}" "$@"; return $?; } || \
|
||
{ +zi-log "({error}Couldn't find the subcommand-handler \`{obj}${reply[5]}{error}' of the z-annex \`{file}${reply[3]}{error}')"; return 1; }
|
||
}
|
||
(( ${+functions[.zinit-confirm]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-autoload.zsh" || return 1
|
||
case "$1" in
|
||
(zstatus)
|
||
.zinit-show-zstatus
|
||
;;
|
||
(delete)
|
||
shift
|
||
.zinit-delete "$@"
|
||
;;
|
||
(times)
|
||
.zinit-show-times "${@[2-correct,-1]}"
|
||
;;
|
||
(self-update)
|
||
.zinit-self-update
|
||
;;
|
||
(unload)
|
||
(( ${+functions[.zinit-unload]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-autoload.zsh" || return 1
|
||
if [[ -z $2 && -z $3 ]]; then
|
||
builtin print "Argument needed, try: help"; ___retval=1
|
||
else
|
||
[[ $2 = -q ]] && { 5=-q; shift; }
|
||
# Unload given plugin. Cloned directory remains intact
|
||
# so as are completions.
|
||
.zinit-unload "${2%%(///|//|/)}" "${${3:#-q}%%(///|//|/)}" "${${(M)4:#-q}:-${(M)3:#-q}}"; ___retval=$?
|
||
fi
|
||
;;
|
||
(bindkeys)
|
||
.zinit-list-bindkeys
|
||
;;
|
||
(update)
|
||
if (( ${+ICE[if]} )) {
|
||
eval "${ICE[if]}" || return 1;
|
||
}
|
||
for REPLY ( ${(s.;.)ICE[has]} ) {
|
||
(( ${+commands[$REPLY]} )) || return 1
|
||
}
|
||
shift
|
||
.zinit-parse-opts update "$@"
|
||
builtin set -- "${reply[@]}"
|
||
if [[ ${OPTS[opt_-a,--all]} -eq 1 || ${OPTS[opt_-p,--parallel]} -eq 1 || ${OPTS[opt_-s,--snippets]} -eq 1 || ${OPTS[opt_-l,--plugins]} -eq 1 || -z $1$2${ICE[teleid]}${ICE[id-as]} ]]; then
|
||
[[ -z $1$2 && $(( OPTS[opt_-a,--all] + OPTS[opt_-p,--parallel] + OPTS[opt_-s,--snippets] + OPTS[opt_-l,--plugins] )) -eq 0 ]] && { builtin print -r -- "Assuming --all is passed"; }
|
||
(( OPTS[opt_-p,--parallel] )) && OPTS[value]=${1:-15}
|
||
.zinit-update-or-status-all update; ___retval=$?
|
||
else
|
||
local ___key ___id="${1%%(///|//|/)}${2:+/}${2%%(///|//|/)}"
|
||
[[ -z ${___id//[[:space:]]/} ]] && ___id="${ICE[id-as]:-$ICE[teleid]}"
|
||
.zinit-update-or-status update "$___id" ""; ___retval=$?
|
||
fi
|
||
;;
|
||
(status)
|
||
if [[ $2 = --all || ( -z $2 && -z $3 ) ]]; then
|
||
[[ -z $2 ]] && { builtin print -r -- "Assuming --all is passed"; }
|
||
.zinit-update-or-status-all status; ___retval=$?
|
||
else
|
||
.zinit-update-or-status status "${2%%(///|//|/)}" "${3%%(///|//|/)}"; ___retval=$?
|
||
fi
|
||
;;
|
||
(report)
|
||
if [[ $2 = --all || ( -z $2 && -z $3 ) ]]; then
|
||
[[ -z $2 ]] && { builtin print -r -- "Assuming --all is passed"; }
|
||
.zinit-show-all-reports
|
||
else
|
||
.zinit-show-report "${2%%(///|//|/)}" "${3%%(///|//|/)}"; ___retval=$?
|
||
fi
|
||
;;
|
||
(plugins)
|
||
.zinit-list-plugins "$2"
|
||
;;
|
||
(snippets)
|
||
.zinit-list-snippets "$2"
|
||
;;
|
||
(completions) # Show installed, enabled or disabled, completions and detect stray and improper ones
|
||
.zinit-show-completions "$2"
|
||
;;
|
||
(cclear) # Delete stray and improper completions.
|
||
.zinit-clear-completions
|
||
;;
|
||
(cdisable)
|
||
if [[ -z $2 ]]; then
|
||
builtin print "Argument needed, try: help"; ___retval=1
|
||
else
|
||
local ___f="_${2#_}"
|
||
# Disable completion given by completion function name
|
||
# with or without leading _, e.g. cp, _cp.
|
||
if .zinit-cdisable "$___f"; then
|
||
(( ${+functions[.zinit-forget-completion]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
.zinit-forget-completion "$___f"
|
||
+zi-log "Initializing completion system ({func}compinit{rst}){…}"
|
||
builtin autoload -Uz compinit
|
||
compinit -d ${ZINIT[ZCOMPDUMP_PATH]:-${ZDOTDIR:-$HOME}/.zcompdump} "${(Q@)${(z@)ZINIT[COMPINIT_OPTS]}}"
|
||
else
|
||
___retval=1
|
||
fi
|
||
fi
|
||
;;
|
||
(cenable)
|
||
if [[ -z $2 ]]; then
|
||
builtin print "Argument needed, try: help"; ___retval=1
|
||
else
|
||
local ___f="_${2#_}"
|
||
# Enable completion given by completion function name
|
||
# with or without leading _, e.g. cp, _cp.
|
||
if .zinit-cenable "$___f"; then
|
||
(( ${+functions[.zinit-forget-completion]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
.zinit-forget-completion "$___f"
|
||
+zi-log "Initializing completion system ({func}compinit{rst}){…}"
|
||
builtin autoload -Uz compinit
|
||
compinit -d ${ZINIT[ZCOMPDUMP_PATH]:-${ZDOTDIR:-$HOME}/.zcompdump} "${(Q@)${(z@)ZINIT[COMPINIT_OPTS]}}"
|
||
else
|
||
___retval=1
|
||
fi
|
||
fi
|
||
;;
|
||
(creinstall)
|
||
(( ${+functions[.zinit-install-completions]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
# Installs completions for plugin. Enables them all. It is a reinstallation, thus every obstacle gets overwritten or removed.
|
||
[[ $2 = -[qQ] ]] && { 5=$2; shift; }
|
||
.zinit-install-completions "${2%%(///|//|/)}" "${3%%(///|//|/)}" 1 "${(M)4:#-[qQ]}"; ___retval=$?
|
||
[[ -z ${(M)4:#-[qQ]} ]] && +zi-log "Initializing completion ({func}compinit{rst}){…}"
|
||
builtin autoload -Uz compinit
|
||
compinit -d ${ZINIT[ZCOMPDUMP_PATH]:-${ZDOTDIR:-$HOME}/.zcompdump} "${(Q@)${(z@)ZINIT[COMPINIT_OPTS]}}"
|
||
;;
|
||
(cuninstall)
|
||
if [[ -z $2 && -z $3 ]]; then
|
||
builtin print "Argument needed, try: help"; ___retval=1
|
||
else
|
||
(( ${+functions[.zinit-forget-completion]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
# Uninstalls completions for plugin.
|
||
.zinit-uninstall-completions "${2%%(///|//|/)}" "${3%%(///|//|/)}"; ___retval=$?
|
||
+zi-log "Initializing completion ({func}compinit{rst}){…}"
|
||
builtin autoload -Uz compinit
|
||
compinit -d ${ZINIT[ZCOMPDUMP_PATH]:-${ZDOTDIR:-$HOME}/.zcompdump} "${(Q@)${(z@)ZINIT[COMPINIT_OPTS]}}"
|
||
fi
|
||
;;
|
||
(csearch)
|
||
.zinit-search-completions
|
||
;;
|
||
(compinit)
|
||
(( ${+functions[.zinit-forget-completion]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-install.zsh" || return 1
|
||
.zinit-compinit; ___retval=$?
|
||
;;
|
||
(compiled)
|
||
.zinit-compiled
|
||
;;
|
||
(compile|uncompile)
|
||
(( ${+functions[.zinit-compile-plugin]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-autoload.zsh" || return 1
|
||
local action="$1" all f help quiet
|
||
shift
|
||
zparseopts -D -F -K -- {a,-all}=all {h,-help}=help {q,-quiet}=quiet || return
|
||
if (( $#help )); then
|
||
print "Usage:"
|
||
print " zinit ${0} <options> <plugin>"
|
||
print " "
|
||
print "Options:"
|
||
print " -a, --all Checkout the specified branch"
|
||
print " -h, --help Checkout the specified branch"
|
||
print " -q, --quiet Checkout the specified tag or commit"
|
||
fi
|
||
if (( $#all )); then
|
||
.zinit-compile-uncompile-all ${action}; ___retval="${?}"
|
||
else
|
||
for f in ${(q+)^@}; do
|
||
.zinit-$action-plugin "${f}"; (( ___retval += ${?} ))
|
||
done
|
||
fi
|
||
;;
|
||
(debug)
|
||
shift;
|
||
(( ${+functions[+zinit-debug]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-additional.zsh"
|
||
+zinit-debug $@
|
||
;;
|
||
|
||
(cdlist)
|
||
.zinit-list-compdef-replay
|
||
;;
|
||
((c(hanges|d))|create|edit|glance|recall|stress)
|
||
.zinit-"$1" "${@[2-correct,-1]%%(///|//|/)}"; ___retval=$?
|
||
;;
|
||
(recently)
|
||
shift
|
||
.zinit-recently "$@"; ___retval=$?
|
||
;;
|
||
(-h|--help|help)
|
||
.zinit-help
|
||
;;
|
||
(version)
|
||
zi::version
|
||
;;
|
||
(srv)
|
||
() { setopt localoptions extendedglob warncreateglobal
|
||
[[ ! -e ${ZINIT[SERVICES_DIR]}/"$2".fifo ]] && { builtin print "No such service: $2"; } ||
|
||
{ [[ $3 = (#i)(next|stop|quit|restart) ]] &&
|
||
{ builtin print "${(U)3}" >>! ${ZINIT[SERVICES_DIR]}/"$2".fifo || builtin print "Service $2 inactive"; ___retval=1; } ||
|
||
{ [[ $3 = (#i)start ]] && rm -f ${ZINIT[SERVICES_DIR]}/"$2".stop ||
|
||
{ builtin print "Unknown service-command: $3"; ___retval=1; }
|
||
}
|
||
}
|
||
} "$@"
|
||
;;
|
||
(module)
|
||
.zinit-module "${@[2-correct,-1]}"; ___retval=$?
|
||
;;
|
||
(*)
|
||
if [[ -z $1 ]] {
|
||
+zi-log -n "{b}{u-warn}ERROR{b-warn}:{rst} Missing a {cmd}subcommand "
|
||
+zinit-prehelp-usage-message rst
|
||
} else {
|
||
+zi-log -n "{b}{u-warn}ERROR{b-warn}:{rst} Unknown subcommand{ehi}:{rst}" \
|
||
"{apo}\`{error}$1{apo}\`{rst} "
|
||
+zinit-prehelp-usage-message rst
|
||
}
|
||
___retval=1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
return ___retval
|
||
} # ]]]
|
||
# FUNCTION: zicdreplay [[[
|
||
# A function that can be invoked from within "atinit", "atload", etc.
|
||
# ice-mod. It works like "zinit cdreplay", which cannot be invoked from such hook ices
|
||
zicdreplay() {
|
||
.zinit-compdef-replay -q
|
||
} # ]]]
|
||
# FUNCTION: zicdclear [[[
|
||
# A wrapper for "zinit cdclear -q" which can be called from hook
|
||
# ices like the atinit"", atload"", etc. ices.
|
||
zicdclear() {
|
||
.zinit-compdef-clear -q
|
||
} # ]]]
|
||
# FUNCTION: zicompinit [[[
|
||
# A function that can be invoked from within "atinit", "atload", etc.
|
||
# ice-mod. It runs "autoload compinit; compinit" and respects
|
||
# ZINIT[ZCOMPDUMP_PATH] and ZINIT[COMPINIT_OPTS].
|
||
zicompinit() {
|
||
autoload -Uz compinit
|
||
compinit -d ${ZINIT[ZCOMPDUMP_PATH]:-${ZDOTDIR:-$HOME}/.zcompdump} "${(Q@)${(z@)ZINIT[COMPINIT_OPTS]}}"
|
||
} # ]]]
|
||
# FUNCTION: zicompdef [[[
|
||
# Stores compdef for a replay with "zicdreplay" (turbo mode) or
|
||
# with "zinit cdreplay" (normal mode). An utility functton of an undefined use case.
|
||
zicompdef() {
|
||
ZINIT_COMPDEF_REPLAY+=( "${(j: :)${(q)@}}" )
|
||
} # ]]]
|
||
# FUNCTION: @autoload [[[
|
||
@autoload() {
|
||
:zinit-tmp-subst-autoload -Uz \
|
||
${(s: :)${${(j: :)${@#\!}}//(#b)((*)(->|=>|→)(*)|(*))/${match[2]:+$match[2] \
|
||
-S $match[4]}${match[5]:+${match[5]} \
|
||
-S ${match[5]}}}} \
|
||
${${${(@M)${@#\!}:#*(->|=>|→)*}}:+-C} \
|
||
${${@#\!}:+-C}
|
||
} # ]]]
|
||
|
||
#
|
||
# Compatibility functions
|
||
#
|
||
|
||
# FUNCTION: zplugin [[[
|
||
zplugin() {
|
||
zinit "$@"
|
||
} # ]]]
|
||
# FUNCTION: zpcdreplay [[[
|
||
zpcdreplay() {
|
||
.zinit-compdef-replay -q
|
||
} # ]]]
|
||
# FUNCTION: zpcdclear [[[
|
||
zpcdclear() {
|
||
.zinit-compdef-clear -q
|
||
} # ]]]
|
||
# FUNCTION: zpcompinit [[[
|
||
zpcompinit() {
|
||
autoload -Uz compinit
|
||
compinit -d ${ZINIT[ZCOMPDUMP_PATH]:-${ZDOTDIR:-$HOME}/.zcompdump} "${(Q@)${(z@)ZINIT[COMPINIT_OPTS]}}"
|
||
} # ]]]
|
||
# FUNCTION: zpcompdef [[[
|
||
zpcompdef() {
|
||
ZINIT_COMPDEF_REPLAY+=( "${(j: :)${(q)@}}" )
|
||
} # ]]]
|
||
|
||
#
|
||
# Source-executed code.
|
||
#
|
||
|
||
(( ZINIT[ALIASES_OPT] )) && builtin setopt aliases
|
||
(( ZINIT[SOURCED] ++ )) && return
|
||
|
||
autoload add-zsh-hook
|
||
if { zmodload zsh/datetime } {
|
||
add-zsh-hook -- precmd @zinit-scheduler # zsh/datetime required for wait/load/unload ice-mods
|
||
ZINIT[HAVE_SCHEDULER]=1
|
||
}
|
||
functions -M -- zinit_scheduler_add 1 1 -zinit_scheduler_add_sh 2>/dev/null
|
||
zmodload zsh/zpty zsh/system 2>/dev/null
|
||
zmodload -F zsh/stat b:zstat 2>/dev/null && ZINIT[HAVE_ZSTAT]=1
|
||
|
||
# code [[[
|
||
if [[ -z $ZINIT[NO_ALIASES] ]]; then
|
||
builtin alias zpl=zinit zplg=zinit zi=zinit zini=zinit
|
||
fi
|
||
|
||
.zinit-prepare-home
|
||
|
||
# Remember source timestamps for the automatic-reload feature.
|
||
typeset -g ZINIT_TMP
|
||
for ZINIT_TMP ( "" -side -install -autoload ) {
|
||
.zinit-get-mtime-into "${ZINIT[BIN_DIR]}/zinit$ZINIT_TMP.zsh" "ZINIT[mtime$ZINIT_TMP]"
|
||
}
|
||
|
||
# Simulate existence of _local/zinit plugin (enables cuninstall of related completions)
|
||
ZINIT_REGISTERED_PLUGINS=( _local/zinit "${(u)ZINIT_REGISTERED_PLUGINS[@]:#_local/zinit}" )
|
||
ZINIT[STATES___local/zinit]=1
|
||
|
||
# inform prezto that the compdef function is available.
|
||
zstyle ':prezto:module:completion' loaded 1
|
||
|
||
# Colorize completions for commands unload, report, creinstall, cuninstall.
|
||
zstyle ':completion:*:zinit:argument-rest:plugins' list-colors '=(#b)(*)/(*)==1;35=1;33'
|
||
zstyle ':completion:*:zinit:argument-rest:plugins' matcher 'r:|=** l:|=*'
|
||
zstyle ':completion:*:*:zinit:*' group-name ""
|
||
# ]]]
|
||
|
||
# module recompilation for the project rename. [[[
|
||
if [[ -e ${${ZINIT[BIN_DIR]}}/zmodules/Src/zdharma/zplugin.so ]] {
|
||
if [[ ! -f ${${ZINIT[BIN_DIR]}}/zmodules/COMPILED_AT || ( ${${ZINIT[BIN_DIR]}}/zmodules/COMPILED_AT -ot ${${ZINIT[BIN_DIR]}}/zmodules/RECOMPILE_REQUEST ) ]] {
|
||
# Don't trust access times and verify hard stored values.
|
||
[[ -e ${${ZINIT[BIN_DIR]}}/module/COMPILED_AT ]] && local compiled_at_ts="$(<${${ZINIT[BIN_DIR]}}/module/COMPILED_AT)"
|
||
[[ -e ${${ZINIT[BIN_DIR]}}/module/RECOMPILE_REQUEST ]] && local recompile_request_ts="$(<${${ZINIT[BIN_DIR]}}/module/RECOMPILE_REQUEST)"
|
||
|
||
if [[ ${recompile_request_ts:-1} -gt ${compiled_at_ts:-0} ]] {
|
||
+zi-log "{u-warn}WARNING{b-warn}:{rst}{msg} A {lhi}recompilation{rst}" \
|
||
"of the Zinit module has been requested… {hi}Building{rst}…"
|
||
(( ${+functions[.zinit-confirm]} )) || builtin source "${ZINIT[BIN_DIR]}/zinit-autoload.zsh" || return 1
|
||
command make -C "${ZINIT[BIN_DIR]}/zmodules" distclean &>/dev/null
|
||
.zinit-module build &>/dev/null
|
||
if command make -C "${ZINIT[BIN_DIR]}/zmodules" &>/dev/null; then
|
||
+zi-log "{ok}Build successful!{rst}"
|
||
else
|
||
builtin print -r -- "${ZINIT[col-error]}Compilation failed.${ZINIT[col-rst]}" \
|
||
"${ZINIT[col-pre]}You can enter the following command:${ZINIT[col-rst]}" \
|
||
'make -C "${ZINIT[BIN_DIR]}/zmodules' \
|
||
"${ZINIT[col-pre]}to see the error messages and e.g.: report an issue" \
|
||
"at GitHub${ZINIT[col-rst]}"
|
||
fi
|
||
|
||
command date '+%s' >! "${ZINIT[BIN_DIR]}/zmodules/COMPILED_AT"
|
||
}
|
||
}
|
||
} # ]]]
|
||
|
||
# Hook-group naming convention for atpull:
|
||
# hook:e-!atpull-* — fires alongside the user's atpull'!...' ice
|
||
# (runs before the pull)
|
||
# hook:no-e-!atpull-* — fires alongside the user's plain atpull'...' ice
|
||
# (runs after the pull)
|
||
# The 'e' stands for "exclamation" (the ! prefix on the user's atpull ice),
|
||
# not "early".
|
||
|
||
# e-!atpull-pre.
|
||
@zinit-register-hook "-r/--reset" hook:e-\!atpull-pre ∞zinit-reset-hook
|
||
# e-!atpull-post.
|
||
@zinit-register-hook "ICE[reset]" hook:e-\!atpull-post ∞zinit-reset-hook
|
||
@zinit-register-hook "atpull'!'" hook:e-\!atpull-post ∞zinit-atpull-e-hook
|
||
|
||
# no-e-!atpull-pre.
|
||
@zinit-register-hook "make'!!'" hook:no-e-\!atpull-pre ∞zinit-make-ee-hook
|
||
@zinit-register-hook "extract" hook:no-e-\!atpull-pre ∞zinit-extract-hook
|
||
@zinit-register-hook "mv''" hook:no-e-\!atpull-pre ∞zinit-mv-hook
|
||
@zinit-register-hook "cp''" hook:no-e-\!atpull-pre ∞zinit-cp-hook
|
||
@zinit-register-hook "compile-plugin" hook:no-e-\!atpull-pre ∞zinit-compile-plugin-hook
|
||
# no-e-!atpull-post.
|
||
@zinit-register-hook "configure'!'" hook:no-e-\!atpull-post ∞zinit-configure-e-hook
|
||
@zinit-register-hook "make'!'" hook:no-e-\!atpull-post ∞zinit-make-e-hook
|
||
@zinit-register-hook "configure''" hook:no-e-\!atpull-post ∞zinit-configure-hook
|
||
@zinit-register-hook "atpull" hook:no-e-\!atpull-post ∞zinit-atpull-hook
|
||
@zinit-register-hook "make''" hook:no-e-\!atpull-post ∞zinit-make-hook
|
||
@zinit-register-hook "cmake''" hook:no-e-\!atpull-post +zinit-cmake-hook
|
||
# atpull-post.
|
||
@zinit-register-hook "compile-plugin" hook:atpull-post ∞zinit-compile-plugin-hook
|
||
@zinit-register-hook "ps-on-update" hook:%atpull-post ∞zinit-ps-on-update-hook
|
||
|
||
# !atclone-pre.
|
||
@zinit-register-hook "make'!!'" hook:\!atclone-pre ∞zinit-make-ee-hook
|
||
@zinit-register-hook "extract" hook:\!atclone-pre ∞zinit-extract-hook
|
||
@zinit-register-hook "mv''" hook:\!atclone-pre ∞zinit-mv-hook
|
||
@zinit-register-hook "cp''" hook:\!atclone-pre ∞zinit-cp-hook
|
||
@zinit-register-hook "compile-plugin" hook:\!atclone-pre ∞zinit-compile-plugin-hook
|
||
# !atclone-post.
|
||
@zinit-register-hook "configure'!'" hook:\!atclone-post ∞zinit-configure-e-hook
|
||
@zinit-register-hook "make'!'" hook:\!atclone-post ∞zinit-make-e-hook
|
||
@zinit-register-hook "configure''" hook:\!atclone-post ∞zinit-configure-hook
|
||
@zinit-register-hook "atclone" hook:\!atclone-post ∞zinit-atclone-hook
|
||
@zinit-register-hook "make''" hook:\!atclone-post ∞zinit-make-hook
|
||
@zinit-register-hook "cmake''" hook:\!atclone-post +zinit-cmake-hook
|
||
# atclone-post.
|
||
@zinit-register-hook "compile-plugin" hook:atclone-post ∞zinit-compile-plugin-hook
|
||
|
||
# create so that for sure no warncreateglobal warning is issued
|
||
typeset -g REPLY
|
||
|
||
# a searchable menu of tags for current directory
|
||
zinit null light-mode autoload'zi-browse-symbol' for %$ZINIT[BIN_DIR]
|
||
zle -N zi-browse-symbol
|
||
zle -N zi-browse-symbol-backwards zi-browse-symbol
|
||
zle -N zi-browse-symbol-pbackwards zi-browse-symbol
|
||
zle -N zi-browse-symbol-pforwards zi-browse-symbol
|
||
zstyle -s ':zinit:browse-symbol' key ZINIT_TMP || ZINIT_TMP='\eQ'
|
||
[[ -n $ZINIT_TMP ]] && bindkey $ZINIT_TMP zi-browse-symbol
|
||
|
||
# Local Variables:
|
||
# mode: Shell-Script
|
||
# sh-indentation: 2
|
||
# indent-tabs-mode: nil
|
||
# sh-basic-offset: 2
|
||
# End:
|
||
# vim: ft=zsh sw=2 ts=2 et foldmarker=[[[,]]] foldmethod=marker
|