Add README and shell polish
This commit is contained in:
175
Zsh/.zsh_completion
Normal file
175
Zsh/.zsh_completion
Normal file
@@ -0,0 +1,175 @@
|
||||
# Completion behavior and wrapper bindings
|
||||
|
||||
autoload -Uz add-zsh-hook
|
||||
|
||||
if ! whence -w compdef >/dev/null 2>&1; then
|
||||
autoload -Uz compinit
|
||||
compinit -i >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
zmodload zsh/complist 2>/dev/null || true
|
||||
|
||||
zstyle ':completion:*' menu select
|
||||
zstyle ':completion:*' verbose yes
|
||||
zstyle ':completion:*' list-grouped yes
|
||||
zstyle ':completion:*:descriptions' format '%F{240}%B%d%b%f'
|
||||
|
||||
typeset -ga DOTZSH_USED_COMMANDS
|
||||
typeset -ga DOTZSH_ALL_COMMANDS
|
||||
typeset -gA DOTZSH_USED_COMMAND_MAP
|
||||
typeset -gA DOTZSH_ALL_COMMAND_MAP
|
||||
typeset -g DOTZSH_USED_COMMANDS_INITIALIZED=0
|
||||
typeset -g DOTZSH_ALL_COMMANDS_INITIALIZED=0
|
||||
typeset -g DOTZSH_USED_COMMAND_LIMIT=120
|
||||
|
||||
_dotzsh_parse_history_line() {
|
||||
local raw_line="$1"
|
||||
local parsed_line="$raw_line"
|
||||
|
||||
case "$parsed_line" in
|
||||
': '*';'*)
|
||||
parsed_line="${parsed_line#*;}"
|
||||
;;
|
||||
esac
|
||||
|
||||
print -r -- "$parsed_line"
|
||||
}
|
||||
|
||||
_dotzsh_extract_command_name() {
|
||||
local line="$(_dotzsh_parse_history_line "$1")"
|
||||
local command_name=""
|
||||
local -a parts=()
|
||||
local index=1
|
||||
|
||||
[ -n "$line" ] || return 1
|
||||
[[ "$line" == '#'* ]] && return 1
|
||||
|
||||
parts=(${(z)line})
|
||||
[ "${#parts[@]}" -gt 0 ] || return 1
|
||||
|
||||
while [ "$index" -le "${#parts[@]}" ]; do
|
||||
command_name="${parts[$index]}"
|
||||
|
||||
case "$command_name" in
|
||||
sudo|time|command|builtin|noglob|env)
|
||||
((index++))
|
||||
continue
|
||||
;;
|
||||
*=*)
|
||||
((index++))
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
break
|
||||
done
|
||||
|
||||
[ -n "$command_name" ] || return 1
|
||||
[[ "$command_name" == _* ]] && return 1
|
||||
[[ "$command_name" =~ '^[A-Za-z0-9][A-Za-z0-9+._-]*$' ]] || return 1
|
||||
|
||||
print -r -- "$command_name"
|
||||
}
|
||||
|
||||
_dotzsh_remember_command() {
|
||||
local command_name="$1"
|
||||
|
||||
[ -n "$command_name" ] || return 0
|
||||
|
||||
DOTZSH_USED_COMMANDS=(${DOTZSH_USED_COMMANDS:#$command_name})
|
||||
DOTZSH_USED_COMMANDS=("$command_name" "${DOTZSH_USED_COMMANDS[@]}")
|
||||
DOTZSH_USED_COMMAND_MAP[$command_name]=1
|
||||
}
|
||||
|
||||
_dotzsh_initialize_used_commands() {
|
||||
local history_file="${HISTFILE:-$HOME/.zsh_history}"
|
||||
local line=""
|
||||
local command_name=""
|
||||
|
||||
[ "$DOTZSH_USED_COMMANDS_INITIALIZED" -eq 0 ] || return 0
|
||||
|
||||
DOTZSH_USED_COMMANDS=()
|
||||
DOTZSH_USED_COMMAND_MAP=()
|
||||
|
||||
while IFS= read -r line; do
|
||||
command_name="$(_dotzsh_extract_command_name "$line")" || continue
|
||||
[[ -n ${DOTZSH_USED_COMMAND_MAP[$command_name]:-} ]] && continue
|
||||
DOTZSH_USED_COMMANDS+=("$command_name")
|
||||
DOTZSH_USED_COMMAND_MAP[$command_name]=1
|
||||
[ "${#DOTZSH_USED_COMMANDS[@]}" -lt "$DOTZSH_USED_COMMAND_LIMIT" ] || break
|
||||
done < <(
|
||||
if [ -r "$history_file" ]; then
|
||||
tac "$history_file" 2>/dev/null || tail -r "$history_file" 2>/dev/null || cat "$history_file"
|
||||
else
|
||||
fc -lnr 1 2>/dev/null
|
||||
fi
|
||||
)
|
||||
|
||||
DOTZSH_USED_COMMANDS_INITIALIZED=1
|
||||
}
|
||||
|
||||
_dotzsh_initialize_all_commands() {
|
||||
local command_name=""
|
||||
|
||||
[ "$DOTZSH_ALL_COMMANDS_INITIALIZED" -eq 0 ] || return 0
|
||||
|
||||
DOTZSH_ALL_COMMANDS=()
|
||||
DOTZSH_ALL_COMMAND_MAP=()
|
||||
|
||||
for command_name in ${(k)aliases} ${(k)builtins} ${(k)commands} ${(k)functions}; do
|
||||
[ -n "$command_name" ] || continue
|
||||
[[ "$command_name" == _* ]] && continue
|
||||
[[ -n ${DOTZSH_ALL_COMMAND_MAP[$command_name]:-} ]] && continue
|
||||
DOTZSH_ALL_COMMANDS+=("$command_name")
|
||||
DOTZSH_ALL_COMMAND_MAP[$command_name]=1
|
||||
done
|
||||
|
||||
DOTZSH_ALL_COMMANDS_INITIALIZED=1
|
||||
}
|
||||
|
||||
_dotzsh_record_command() {
|
||||
local command_name=""
|
||||
|
||||
command_name="$(_dotzsh_extract_command_name "$1")" || return 0
|
||||
_dotzsh_remember_command "$command_name"
|
||||
}
|
||||
|
||||
_dotzsh_command_menu() {
|
||||
local command_name=""
|
||||
local -a other_commands=()
|
||||
local -a filtered_used_commands=()
|
||||
local -a used_display=()
|
||||
local current_prefix="$PREFIX"
|
||||
|
||||
_dotzsh_initialize_used_commands
|
||||
_dotzsh_initialize_all_commands
|
||||
|
||||
for command_name in "${DOTZSH_USED_COMMANDS[@]}"; do
|
||||
[[ -n ${DOTZSH_ALL_COMMAND_MAP[$command_name]:-} ]] || continue
|
||||
[ -z "$current_prefix" ] || [[ "$command_name" == ${~current_prefix}* ]] || continue
|
||||
filtered_used_commands+=("$command_name")
|
||||
used_display+=("* $command_name")
|
||||
done
|
||||
|
||||
for command_name in "${DOTZSH_ALL_COMMANDS[@]}"; do
|
||||
[[ -n ${DOTZSH_USED_COMMAND_MAP[$command_name]:-} ]] && continue
|
||||
[ -z "$current_prefix" ] || [[ "$command_name" == ${~current_prefix}* ]] || continue
|
||||
other_commands+=("$command_name")
|
||||
done
|
||||
|
||||
[ "${#filtered_used_commands[@]}" -eq 0 ] || compadd -Q -U -o nosort -d used_display -- "${filtered_used_commands[@]}"
|
||||
[ "${#other_commands[@]}" -eq 0 ] || compadd -Q -U -o nosort -- "${other_commands[@]}"
|
||||
|
||||
[ "${#filtered_used_commands[@]}" -gt 0 ] || [ "${#other_commands[@]}" -gt 0 ]
|
||||
}
|
||||
|
||||
compdef _dotzsh_command_menu -command-
|
||||
add-zsh-hook preexec _dotzsh_record_command
|
||||
|
||||
autoload -Uz _gvm _conda _go _node _npm _npx 2>/dev/null
|
||||
compdef _gvm gvm
|
||||
compdef _go go gofmt
|
||||
compdef _conda conda
|
||||
compdef _node node
|
||||
compdef _npm npm
|
||||
compdef _npx npx
|
||||
Reference in New Issue
Block a user