94 lines
2.6 KiB
Bash
94 lines
2.6 KiB
Bash
#!/bin/zsh
|
|
zmodload -Fa zsh/files b:zf_mkdir b:zf_rm
|
|
zmodload -F zsh/parameter p:functions
|
|
zmodload -F zsh/system p:sysparams
|
|
zmodload -F zsh/zleparameter p:widgets
|
|
zmodload -Fa zsh/zutil b:zstyle
|
|
builtin autoload +X -Uz add-zsh-hook zmathfunc
|
|
zmathfunc
|
|
|
|
typeset -ga _autocomplete__ctxt_opts=( completealiases completeinword )
|
|
|
|
typeset -ga _autocomplete__mods=( compinit config widgets key-bindings recent-dirs async )
|
|
|
|
typeset -gU FPATH fpath=( ~autocomplete/Completions $fpath[@] )
|
|
|
|
local -P xdg_data_home=${XDG_DATA_HOME:-$HOME/.local/share}
|
|
|
|
local -P zsh_data_dir=$xdg_data_home/zsh
|
|
[[ -d $zsh_data_dir ]] ||
|
|
zf_mkdir -pm 0700 $zsh_data_dir
|
|
|
|
local -P old_logdir=$xdg_data_home/zsh-autocomplete/log
|
|
[[ -d $old_logdir ]] &&
|
|
zf_rm -fr -- $old_logdir
|
|
|
|
local -P logdir=${XDG_STATE_HOME:-$HOME/.local/state}/zsh-autocomplete/log
|
|
|
|
local -P bug=
|
|
for bug in ${logdir} ${logdir:h}; do
|
|
[[ -d $bug ]] ||
|
|
zf_rm -f $bug
|
|
done
|
|
|
|
zf_mkdir -p -- $logdir
|
|
hash -d autocomplete-log=$logdir
|
|
|
|
local -Pa older_than_a_week=( $logdir/*(Nmd+7) )
|
|
(( $#older_than_a_week[@] )) &&
|
|
zf_rm -f -- $older_than_a_week[@]
|
|
|
|
typeset -g _autocomplete__log=${logdir}/${(%):-%D{%F}}.log
|
|
typeset -g _autocomplete__ps4=$'%D{%T.%.} %e:%N:%I\t%? %(1_,%_ ,)'
|
|
|
|
local -P zsh_cache_dir=${XDG_CACHE_HOME:-$HOME/.cache}/zsh
|
|
[[ -d $zsh_cache_dir ]] ||
|
|
zf_mkdir -pm 0700 $zsh_cache_dir
|
|
|
|
local -P mod=
|
|
for mod in $_autocomplete__mods; do
|
|
builtin zstyle -T ":autocomplete:$mod" enabled &&
|
|
.autocomplete__$mod "$@"
|
|
unfunction .autocomplete__$mod
|
|
done
|
|
|
|
add-zsh-hook precmd ${0}:precmd
|
|
|
|
# Make sure we always run before Autosuggest, so we don't overwrite its default ignore list.
|
|
typeset -gaU precmd_functions=( ${0}:precmd $precmd_functions )
|
|
|
|
${0}:precmd() {
|
|
# WORKAROUND: For hook functions in Zsh 5.8, $0 can be something else than the function name.
|
|
0=${(%):-%N}
|
|
|
|
add-zsh-hook -d precmd $0
|
|
unfunction $0
|
|
|
|
() {
|
|
emulate -L zsh
|
|
setopt $_autocomplete__func_opts[@]
|
|
|
|
# Workaround for https://www.zsh.org/mla/workers/2021/msg01310.html
|
|
if builtin zstyle -L zle-hook types > /dev/null; then
|
|
local -P hook=
|
|
for hook in \
|
|
zle-{isearch-{exit,update},line-{pre-redraw,init,finish},history-line-set,keymap-select}
|
|
do
|
|
[[ -v widgets[$hook] &&
|
|
$widgets[$hook] == user:_zsh_highlight_widget_orig-s*-r<->-$hook ]] &&
|
|
builtin zle -N $hook azhw:$hook
|
|
done
|
|
fi
|
|
}
|
|
|
|
local -P mod=
|
|
for mod in $_autocomplete__mods; do
|
|
mod=.autocomplete__${mod}:precmd
|
|
if [[ -v functions[$mod] ]]; then
|
|
$mod
|
|
unfunction $mod
|
|
fi
|
|
done
|
|
|
|
true
|
|
}
|