diff --git a/zsh/.zsh_compl/zoxide b/zsh/.zsh_compl/zoxide new file mode 100644 index 0000000..49da429 --- /dev/null +++ b/zsh/.zsh_compl/zoxide @@ -0,0 +1,121 @@ +# ============================================================================= +# +# Utility functions for zoxide. +# + +# pwd based on the value of _ZO_RESOLVE_SYMLINKS. +function __zoxide_pwd() { + \builtin pwd -L +} + +# cd + custom logic based on the value of _ZO_ECHO. +function __zoxide_cd() { + # shellcheck disable=SC2164 + \builtin cd -- "$@" >/dev/null +} + +# ============================================================================= +# +# Hook configuration for zoxide. +# + +# Hook to add new entries to the database. +function __zoxide_hook() { + # shellcheck disable=SC2312 + \command zoxide add -- "$(__zoxide_pwd)" +} + +# Initialize hook. +# shellcheck disable=SC2154 +if [[ ${precmd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] && [[ ${chpwd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]]; then + chpwd_functions+=(__zoxide_hook) +fi + +# ============================================================================= +# +# When using zoxide with --no-cmd, alias these internal functions as desired. +# + +__zoxide_z_prefix='z#' + +# Jump to a directory using only keywords. +function __zoxide_z() { + # shellcheck disable=SC2199 + if [[ "$#" -eq 0 ]]; then + __zoxide_cd ~ + elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]$ ]]; }; then + __zoxide_cd "$1" + elif [[ "$@[-1]" == "${__zoxide_z_prefix}"* ]]; then + # shellcheck disable=SC2124 + \builtin local result="${@[-1]}" + __zoxide_cd "${result:${#__zoxide_z_prefix}}" + else + \builtin local result + # shellcheck disable=SC2312 + result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -- "$@")" && + __zoxide_cd "${result}" + fi +} + +# Jump to a directory using interactive search. +function __zoxide_zi() { + \builtin local result + result="$(\command zoxide query -i -- "$@")" && __zoxide_cd "${result}" +} + +# ============================================================================= +# +# Commands for zoxide. Disable these using --no-cmd. +# + +\builtin unalias z &>/dev/null || \builtin true +function z() { + __zoxide_z "$@" +} + +\builtin unalias zi &>/dev/null || \builtin true +function zi() { + __zoxide_zi "$@" +} + +if [[ -o zle ]]; then + function __zoxide_z_complete() { + # Only show completions when the cursor is at the end of the line. + # shellcheck disable=SC2154 + [[ "${#words[@]}" -eq "${CURRENT}" ]] || return + + if [[ "${#words[@]}" -eq 2 ]]; then + _files -/ + elif [[ "${words[-1]}" == '' ]]; then + \builtin local result + # shellcheck disable=SC2086,SC2312 + if result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -i -- ${words[2,-1]})"; then + __zoxide_result="${result}" + else + __zoxide_result='' + fi + \builtin printf '\e[5n' + fi + } + + function __zoxide_z_complete_helper() { + \builtin local result="${__zoxide_z_prefix}${__zoxide_result}" + # shellcheck disable=SC2296 + [[ -n "${__zoxide_result}" ]] && LBUFFER="${LBUFFER}${(q-)result}" + \builtin zle reset-prompt + } + + \builtin zle -N __zoxide_z_complete_helper + \builtin bindkey "\e[0n" __zoxide_z_complete_helper + if [[ "${+functions[compdef]}" -ne 0 ]]; then + \compdef -d z + \compdef -d zi + \compdef __zoxide_z_complete z + fi +fi + +# ============================================================================= +# +# To initialize zoxide, add this to your configuration (usually ~/.zshrc): +# +# eval "$(zoxide init zsh)"