From 791deec8acbea0b94e34ab56342215b2780b4131 Mon Sep 17 00:00:00 2001 From: Ajeet D'Souza <98ajeet@gmail.com> Date: Thu, 9 Jan 2025 03:21:35 +0530 Subject: [PATCH] zsh doctor --- templates/zsh.txt | 49 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/templates/zsh.txt b/templates/zsh.txt index 82a6b8a9..ff3cbbaf 100644 --- a/templates/zsh.txt +++ b/templates/zsh.txt @@ -28,10 +28,6 @@ function __zoxide_cd() { # Hook configuration for zoxide. # -{% if hook == InitHook::None -%} -{{ not_configured -}} - -{% else -%} # Hook to add new entries to the database. function __zoxide_hook() { # shellcheck disable=SC2312 @@ -39,16 +35,46 @@ function __zoxide_hook() { } # Initialize hook. -# shellcheck disable=SC2154 -if [[ ${precmd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] && [[ ${chpwd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]]; then +\builtin typeset -ga precmd_functions +\builtin typeset -ga chpwd_functions + +# shellcheck disable=SC2034,SC2296 +precmd_functions=("${(@)precmd_functions:#__zoxide_hook}") +# shellcheck disable=SC2034,SC2296 +chpwd_functions=("${(@)chpwd_functions:#__zoxide_hook}") + {%- if hook == InitHook::Prompt %} - precmd_functions+=(__zoxide_hook) +precmd_functions+=(__zoxide_hook) {%- else if hook == InitHook::Pwd %} - chpwd_functions+=(__zoxide_hook) +chpwd_functions+=(__zoxide_hook) +{%- endif %} + +# Report common issues. +function __zoxide_doctor() { +{%- if hook == InitHook::None %} + return 0 + +{%- else %} + [[ ${_ZO_DOCTOR:-1} -ne 0 ]] || return 0 + +{%- if hook == InitHook::Prompt %} + [[ ${precmd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] || return 0 +{%- else if hook == InitHook::Pwd %} + [[ ${chpwd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] || return 0 {%- endif %} -fi + _ZO_DOCTOR=0 + \builtin printf '%s\n' \ + 'zoxide: detected a possible configuration issue.' \ + 'Please ensure that zoxide is initialized right at the end of your shell configuration file (usually ~/.zshrc).' \ + '' \ + 'If the issue persists, consider filing an issue at:' \ + 'https://github.com/ajeetdsouza/zoxide/issues.' \ + '' \ + 'Disable this message by setting _ZO_DOCTOR=0.' \ + '' >&2 {%- endif %} +} {{ section }} # When using zoxide with --no-cmd, alias these internal functions as desired. @@ -56,7 +82,7 @@ fi # Jump to a directory using only keywords. function __zoxide_z() { - # shellcheck disable=SC2199 + __zoxide_doctor if [[ "$#" -eq 0 ]]; then __zoxide_cd ~ elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]$ ]]; }; then @@ -72,6 +98,7 @@ function __zoxide_z() { # Jump to a directory using interactive search. function __zoxide_zi() { + __zoxide_doctor \builtin local result result="$(\command zoxide query --interactive -- "$@")" && __zoxide_cd "${result}" } @@ -148,6 +175,6 @@ if [[ -o zle ]]; then fi {{ section }} -# To initialize zoxide, add this to your configuration (usually ~/.zshrc): +# To initialize zoxide, add this to your shell configuration file (usually ~/.zshrc): # # eval "$(zoxide init zsh)"