141 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
{%- let section = "# =============================================================================\n#" -%}
 | 
						|
{%- let not_configured = "# -- not configured --" -%}
 | 
						|
 | 
						|
{{ section }}
 | 
						|
# Utility functions for zoxide.
 | 
						|
#
 | 
						|
 | 
						|
# pwd based on the value of _ZO_RESOLVE_SYMLINKS.
 | 
						|
function __zoxide_pwd() {
 | 
						|
{%- if resolve_symlinks %}
 | 
						|
    \builtin pwd -P
 | 
						|
{%- else %}
 | 
						|
    \builtin pwd -L
 | 
						|
{%- endif %}
 | 
						|
}
 | 
						|
 | 
						|
# cd + custom logic based on the value of _ZO_ECHO.
 | 
						|
function __zoxide_cd() {
 | 
						|
    # shellcheck disable=SC2164
 | 
						|
    \builtin cd "$@" {%- if echo %} && __zoxide_pwd {%- endif %}
 | 
						|
}
 | 
						|
 | 
						|
{{ section }}
 | 
						|
# Hook configuration for zoxide.
 | 
						|
#
 | 
						|
 | 
						|
{# Custom prompts often use "$?" to show the exit status of the previous
 | 
						|
 # command. Adding __zoxide_hook to the front of $PROMPT_COMMAND would change
 | 
						|
 # the exit status, so we must capture it and return it manually instead. -#}
 | 
						|
 | 
						|
# Hook to add new entries to the database.
 | 
						|
{%- match hook %}
 | 
						|
{%- when InitHook::None %}
 | 
						|
{{ not_configured }}
 | 
						|
 | 
						|
{%- when InitHook::Prompt %}
 | 
						|
function __zoxide_hook() {
 | 
						|
    \builtin local -r __zoxide_retval="$?"
 | 
						|
    zoxide add -- "$(__zoxide_pwd)"
 | 
						|
    return "${__zoxide_retval}"
 | 
						|
}
 | 
						|
 | 
						|
{%- when InitHook::Pwd %}
 | 
						|
function __zoxide_hook() {
 | 
						|
    \builtin local -r __zoxide_retval="$?"
 | 
						|
    \builtin local -r __zoxide_pwd_tmp="$(__zoxide_pwd)"
 | 
						|
    if [ -z "${__zoxide_pwd_old}" ]; then
 | 
						|
        __zoxide_pwd_old="${__zoxide_pwd_tmp}"
 | 
						|
    elif [ "${__zoxide_pwd_old}" != "${__zoxide_pwd_tmp}" ]; then
 | 
						|
        __zoxide_pwd_old="${__zoxide_pwd_tmp}"
 | 
						|
        zoxide add -- "${__zoxide_pwd_old}"
 | 
						|
    fi
 | 
						|
    return "${__zoxide_retval}"
 | 
						|
}
 | 
						|
 | 
						|
{%- endmatch %}
 | 
						|
 | 
						|
{# bash throws an error if $PROMPT_COMMAND contains two semicolons in sequence.
 | 
						|
 # This is hard to avoid perfectly, but adding __zoxide_hook to the front of
 | 
						|
 # $PROMPT_COMMAND rather than the back makes this scenario unlikely. -#}
 | 
						|
 | 
						|
# Initialize hook.
 | 
						|
if [ "${__zoxide_hooked}" != '1' ]; then
 | 
						|
    __zoxide_hooked='1'
 | 
						|
{%- if hook == InitHook::None %}
 | 
						|
    {{ not_configured }}
 | 
						|
{%- else %}
 | 
						|
    if [ -z "${PROMPT_COMMAND}" ]; then
 | 
						|
        PROMPT_COMMAND='__zoxide_hook'
 | 
						|
    else
 | 
						|
        PROMPT_COMMAND="__zoxide_hook;${PROMPT_COMMAND#;}"
 | 
						|
    fi
 | 
						|
{%- endif %}
 | 
						|
fi
 | 
						|
 | 
						|
{{ section }}
 | 
						|
# When using zoxide with --no-aliases, alias these internal functions as
 | 
						|
# desired.
 | 
						|
#
 | 
						|
 | 
						|
# Jump to a directory using only keywords.
 | 
						|
function __zoxide_z() {
 | 
						|
    if [ "$#" -eq 0 ]; then
 | 
						|
        __zoxide_cd ~
 | 
						|
    elif [ "$#" -eq 1 ] && [ "$1" = '-' ]; then
 | 
						|
        if [ -n "${OLDPWD}" ]; then
 | 
						|
            __zoxide_cd "${OLDPWD}"
 | 
						|
        else
 | 
						|
            # shellcheck disable=SC2016
 | 
						|
            \builtin printf 'zoxide: $OLDPWD is not set\n'
 | 
						|
            return 1
 | 
						|
        fi
 | 
						|
    elif [ "$#" -eq 1 ] && [ -d "$1" ]; then
 | 
						|
        __zoxide_cd "$1"
 | 
						|
    else
 | 
						|
        \builtin local __zoxide_result
 | 
						|
        __zoxide_result="$(zoxide query --exclude "$(__zoxide_pwd)" -- "$@")" && __zoxide_cd "${__zoxide_result}"
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
# Jump to a directory using interactive search.
 | 
						|
function __zoxide_zi() {
 | 
						|
    \builtin local __zoxide_result
 | 
						|
    __zoxide_result="$(zoxide query -i -- "$@")" && __zoxide_cd "${__zoxide_result}"
 | 
						|
}
 | 
						|
 | 
						|
{{ section }}
 | 
						|
# Convenient aliases for zoxide. Disable these using --no-aliases.
 | 
						|
#
 | 
						|
 | 
						|
{%- match cmd %}
 | 
						|
{%- when Some with (cmd) %}
 | 
						|
 | 
						|
# Remove definitions.
 | 
						|
function __zoxide_unset() {
 | 
						|
    \builtin unset -f "$@" &>/dev/null
 | 
						|
    \builtin unset -v "$@" &>/dev/null
 | 
						|
    \builtin unalias "$@" &>/dev/null || \builtin :
 | 
						|
}
 | 
						|
 | 
						|
__zoxide_unset '{{cmd}}'
 | 
						|
function {{cmd}}() {
 | 
						|
    __zoxide_z "$@"
 | 
						|
}
 | 
						|
 | 
						|
__zoxide_unset '{{cmd}}i'
 | 
						|
function {{cmd}}i() {
 | 
						|
    __zoxide_zi "$@"
 | 
						|
}
 | 
						|
 | 
						|
{%- when None %}
 | 
						|
 | 
						|
{{ not_configured }}
 | 
						|
 | 
						|
{%- endmatch %}
 | 
						|
 | 
						|
{{ section }}
 | 
						|
# To initialize zoxide, add this to your configuration (usually ~/.bashrc):
 | 
						|
#
 | 
						|
# eval "$(zoxide init bash)"
 |