136 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.7 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 cfg!(windows) %}
 | |
|     command cygpath -w (builtin pwd -P)
 | |
| {%- else if resolve_symlinks %}
 | |
|     builtin pwd -P
 | |
| {%- else %}
 | |
|     builtin pwd -L
 | |
| {%- endif %}
 | |
| end
 | |
| 
 | |
| # A copy of fish's internal cd function. This makes it possible to use
 | |
| # `alias cd=z` without causing an infinite loop.
 | |
| if ! builtin functions --query __zoxide_cd_internal
 | |
|     if builtin functions --query cd
 | |
|         builtin functions --copy cd __zoxide_cd_internal
 | |
|     else
 | |
|         alias __zoxide_cd_internal='builtin cd'
 | |
|     end
 | |
| end
 | |
| 
 | |
| # cd + custom logic based on the value of _ZO_ECHO.
 | |
| function __zoxide_cd
 | |
| {%- if cfg!(windows) %}
 | |
|     __zoxide_cd_internal (cygpath -u $argv)
 | |
| {%- else %}
 | |
|     __zoxide_cd_internal $argv
 | |
| {%- endif %}
 | |
| {%- if echo %}
 | |
|     and __zoxide_pwd
 | |
| {%- endif %}
 | |
| end
 | |
| 
 | |
| {{ section }}
 | |
| # Hook configuration for zoxide.
 | |
| #
 | |
| 
 | |
| {% if hook == InitHook::None -%}
 | |
| {{ not_configured }}
 | |
| 
 | |
| {%- else -%}
 | |
| # Initialize hook to add new entries to the database.
 | |
| {%- if hook == InitHook::Prompt %}
 | |
| function __zoxide_hook --on-event fish_prompt
 | |
| {%- else if hook == InitHook::Pwd %}
 | |
| function __zoxide_hook --on-variable PWD
 | |
| {%- endif %}
 | |
|     test -z "$fish_private_mode"
 | |
|     and command zoxide add -- (__zoxide_pwd)
 | |
| end
 | |
| 
 | |
| {%- endif %}
 | |
| 
 | |
| {{ section }}
 | |
| # When using zoxide with --no-cmd, alias these internal functions as desired.
 | |
| #
 | |
| 
 | |
| if test -z $__zoxide_z_prefix
 | |
|     set __zoxide_z_prefix 'z!'
 | |
| end
 | |
| set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix)
 | |
| 
 | |
| # Jump to a directory using only keywords.
 | |
| function __zoxide_z
 | |
|     set -l argc (count $argv)
 | |
|     if test $argc -eq 0
 | |
|         __zoxide_cd $HOME
 | |
|     else if test "$argv" = -
 | |
|         __zoxide_cd -
 | |
|     else if test $argc -eq 1 -a -d $argv[1]
 | |
|         __zoxide_cd $argv[1]
 | |
|     else if set -l result (string replace --regex $__zoxide_z_prefix_regex '' $argv[-1]); and test -n $result
 | |
|         __zoxide_cd $result
 | |
|     else
 | |
|         set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv)
 | |
|         and __zoxide_cd $result
 | |
|     end
 | |
| end
 | |
| 
 | |
| # Completions.
 | |
| function __zoxide_z_complete
 | |
|     set -l tokens (commandline --current-process --tokenize)
 | |
|     set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize)
 | |
| 
 | |
|     if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1
 | |
|         # If there are < 2 arguments, use `cd` completions.
 | |
|         complete --do-complete "'' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$'
 | |
|     else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1]
 | |
|         # If the last argument is empty and the one before doesn't start with
 | |
|         # $__zoxide_z_prefix, use interactive selection.
 | |
|         set -l query $tokens[2..-1]
 | |
|         set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query)
 | |
|         and echo $__zoxide_z_prefix$result
 | |
|         commandline --function repaint
 | |
|     end
 | |
| end
 | |
| complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)'
 | |
| 
 | |
| # Jump to a directory using interactive search.
 | |
| function __zoxide_zi
 | |
|     set -l result (command zoxide query --interactive -- $argv)
 | |
|     and __zoxide_cd $result
 | |
| end
 | |
| 
 | |
| {{ section }}
 | |
| # Commands for zoxide. Disable these using --no-cmd.
 | |
| #
 | |
| 
 | |
| {%- match cmd %}
 | |
| {%- when Some with (cmd) %}
 | |
| 
 | |
| abbr --erase {{cmd}} &>/dev/null
 | |
| alias {{cmd}}=__zoxide_z
 | |
| 
 | |
| abbr --erase {{cmd}}i &>/dev/null
 | |
| alias {{cmd}}i=__zoxide_zi
 | |
| 
 | |
| {%- when None %}
 | |
| 
 | |
| {{ not_configured }}
 | |
| 
 | |
| {%- endmatch %}
 | |
| 
 | |
| {{ section }}
 | |
| # To initialize zoxide, add this to your configuration (usually
 | |
| # ~/.config/fish/config.fish):
 | |
| #
 | |
| #   zoxide init fish | source
 |