mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2024-11-18 09:51:06 +01:00
new strategy: predefined
This commit is contained in:
parent
c7d4a85031
commit
8ee6d01973
3 changed files with 2513 additions and 0 deletions
2327
predefined.txt
Normal file
2327
predefined.txt
Normal file
File diff suppressed because it is too large
Load diff
93
src/strategies/predefined.zsh
Normal file
93
src/strategies/predefined.zsh
Normal file
|
@ -0,0 +1,93 @@
|
|||
# zsh-augosuggestion: predefined strategy
|
||||
# 1. search in history, returns result if it exists
|
||||
# 2. search in predefined files
|
||||
#
|
||||
# configuration:
|
||||
#
|
||||
# ZSH_AUTOSUGGEST_PREDEFINE_NAME - auto generated predefine file name
|
||||
# ZSH_AUTOSUGGEST_PREDEFINE_PATH - user defined files joined by semicolon
|
||||
#
|
||||
# "$HOME/.zsh_autosuggest" will be generated at the first time
|
||||
#
|
||||
|
||||
_zsh_autosuggest_script_path="${0:A:h}"
|
||||
|
||||
_zsh_autosuggest_predefined_generate() {
|
||||
local pname="$HOME/.zsh_autosuggest"
|
||||
pname="${ZSH_AUTOSUGGEST_PREDEFINE_NAME:-$pname}"
|
||||
local suggests=()
|
||||
local pwd=$(pwd)
|
||||
|
||||
# skip when ~/.zsh_autosuggest exists
|
||||
[ -f "$pname" ] && return
|
||||
|
||||
echo "autosuggestions is generating: $pname"
|
||||
|
||||
# copy builtin predefine database
|
||||
local txt="${_zsh_autosuggest_script_path}/predefined.txt"
|
||||
|
||||
[ -f "$txt" ] && cat "$txt" > "$pname" || touch "$pname"
|
||||
|
||||
# enumerate commands in $PATH and add them to ~/.zsh_autosuggest
|
||||
for p ("${(@s/:/)PATH}"); do
|
||||
cd "$p"
|
||||
local files=("${(@f)$(ls -la | awk -F ' ' '{print $9}')}")
|
||||
for fn in ${files}; do
|
||||
if [ -x "$fn" ] && [[ "${fn:l}" != *.dll ]]; then
|
||||
if [ -f "$fn" ] && [[ "${fn:l}" != *.nls ]]; then
|
||||
# trim cygwin .exe/.cmd/.bat postfix
|
||||
if [[ "$fn" == *.exe ]]; then
|
||||
fn=${fn/%.exe/}
|
||||
elif [[ "$fn" == *.cmd ]]; then
|
||||
fn=${fn/%.cmd/}
|
||||
elif [[ "$fn" == *.bat ]]; then
|
||||
fn=${fn/%.bat/}
|
||||
fi
|
||||
if [[ ${#fn} -gt 1 ]]; then
|
||||
suggests+=$fn
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
cd "${pwd}"
|
||||
|
||||
print -l $suggests >> "$pname"
|
||||
}
|
||||
|
||||
# echo "sourced predefined"
|
||||
|
||||
_zsh_autosuggest_strategy_predefined() {
|
||||
emulate -L zsh
|
||||
setopt EXTENDED_GLOB
|
||||
local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}"
|
||||
local result="${history[(r)${prefix}*]}"
|
||||
result=""
|
||||
|
||||
if [[ $result == "" ]]; then
|
||||
if (( ! ${+_ZSH_AUTOSUGGEST_PREDEFINE} )); then
|
||||
typeset -g _ZSH_AUTOSUGGEST_PREDEFINE=()
|
||||
local pname="$HOME/.zsh_autosuggest"
|
||||
pname="${ZSH_AUTOSUGGEST_PREDEFINE_NAME:-$pname}"
|
||||
local names="${ZSH_AUTOSUGGEST_PREDEFINE_PATH};$pname"
|
||||
local array=()
|
||||
for i ("${(@s/;/)names}"); do
|
||||
if [ -n "$i" ] && [ -f "$i" ]; then
|
||||
local temp=(${(f)"$(<$i)"})
|
||||
array+=($temp)
|
||||
fi
|
||||
done
|
||||
_ZSH_AUTOSUGGEST_PREDEFINE+=($array)
|
||||
fi
|
||||
result="${_ZSH_AUTOSUGGEST_PREDEFINE[(r)${prefix}*]}"
|
||||
fi
|
||||
|
||||
typeset -g suggestion="$result"
|
||||
}
|
||||
|
||||
|
||||
_zsh_autosuggest_predefined_generate
|
||||
|
||||
# vim: set ts=4 sw=4 tw=0 noet :
|
||||
|
||||
|
|
@ -564,6 +564,99 @@ _zsh_autosuggest_strategy_match_prev_cmd() {
|
|||
# Give back the matched history entry
|
||||
typeset -g suggestion="$history[$histkey]"
|
||||
}
|
||||
# zsh-augosuggestion: predefined strategy
|
||||
# 1. search in history, returns result if it exists
|
||||
# 2. search in predefined files
|
||||
#
|
||||
# configuration:
|
||||
#
|
||||
# ZSH_AUTOSUGGEST_PREDEFINE_NAME - auto generated predefine file name
|
||||
# ZSH_AUTOSUGGEST_PREDEFINE_PATH - user defined files joined by semicolon
|
||||
#
|
||||
# "$HOME/.zsh_autosuggest" will be generated at the first time
|
||||
#
|
||||
|
||||
_zsh_autosuggest_script_path="${0:A:h}"
|
||||
|
||||
_zsh_autosuggest_predefined_generate() {
|
||||
local pname="$HOME/.zsh_autosuggest"
|
||||
pname="${ZSH_AUTOSUGGEST_PREDEFINE_NAME:-$pname}"
|
||||
local suggests=()
|
||||
local pwd=$(pwd)
|
||||
|
||||
# skip when ~/.zsh_autosuggest exists
|
||||
[ -f "$pname" ] && return
|
||||
|
||||
echo "autosuggestions is generating: $pname"
|
||||
|
||||
# copy builtin predefine database
|
||||
local txt="${_zsh_autosuggest_script_path}/predefined.txt"
|
||||
|
||||
[ -f "$txt" ] && cat "$txt" > "$pname" || touch "$pname"
|
||||
|
||||
# enumerate commands in $PATH and add them to ~/.zsh_autosuggest
|
||||
for p ("${(@s/:/)PATH}"); do
|
||||
cd "$p"
|
||||
local files=("${(@f)$(ls -la | awk -F ' ' '{print $9}')}")
|
||||
for fn in ${files}; do
|
||||
if [ -x "$fn" ] && [[ "${fn:l}" != *.dll ]]; then
|
||||
if [ -f "$fn" ] && [[ "${fn:l}" != *.nls ]]; then
|
||||
# trim cygwin .exe/.cmd/.bat postfix
|
||||
if [[ "$fn" == *.exe ]]; then
|
||||
fn=${fn/%.exe/}
|
||||
elif [[ "$fn" == *.cmd ]]; then
|
||||
fn=${fn/%.cmd/}
|
||||
elif [[ "$fn" == *.bat ]]; then
|
||||
fn=${fn/%.bat/}
|
||||
fi
|
||||
if [[ ${#fn} -gt 1 ]]; then
|
||||
suggests+=$fn
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
cd "${pwd}"
|
||||
|
||||
print -l $suggests >> "$pname"
|
||||
}
|
||||
|
||||
# echo "sourced predefined"
|
||||
|
||||
_zsh_autosuggest_strategy_predefined() {
|
||||
emulate -L zsh
|
||||
setopt EXTENDED_GLOB
|
||||
local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}"
|
||||
local result="${history[(r)${prefix}*]}"
|
||||
result=""
|
||||
|
||||
if [[ $result == "" ]]; then
|
||||
if (( ! ${+_ZSH_AUTOSUGGEST_PREDEFINE} )); then
|
||||
typeset -g _ZSH_AUTOSUGGEST_PREDEFINE=()
|
||||
local pname="$HOME/.zsh_autosuggest"
|
||||
pname="${ZSH_AUTOSUGGEST_PREDEFINE_NAME:-$pname}"
|
||||
local names="${ZSH_AUTOSUGGEST_PREDEFINE_PATH};$pname"
|
||||
local array=()
|
||||
for i ("${(@s/;/)names}"); do
|
||||
if [ -n "$i" ] && [ -f "$i" ]; then
|
||||
local temp=(${(f)"$(<$i)"})
|
||||
array+=($temp)
|
||||
fi
|
||||
done
|
||||
_ZSH_AUTOSUGGEST_PREDEFINE+=($array)
|
||||
fi
|
||||
result="${_ZSH_AUTOSUGGEST_PREDEFINE[(r)${prefix}*]}"
|
||||
fi
|
||||
|
||||
typeset -g suggestion="$result"
|
||||
}
|
||||
|
||||
|
||||
_zsh_autosuggest_predefined_generate
|
||||
|
||||
# vim: set ts=4 sw=4 tw=0 noet :
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------#
|
||||
# Async #
|
||||
|
|
Loading…
Reference in a new issue