From 09946832c1c07d13788e8b10820726cc4e6e5b8e Mon Sep 17 00:00:00 2001 From: Daniel Lundin Date: Sun, 30 Jun 2024 23:08:26 +0200 Subject: [PATCH] fish: use zoxide instead of fre + fzf --- .config/fish/conf.d/zoxide.fish | 100 ++++++++++++++++++++++++++++++++ .config/fish/config.fish | 25 ++++++++ 2 files changed, 125 insertions(+) create mode 100644 .config/fish/conf.d/zoxide.fish diff --git a/.config/fish/conf.d/zoxide.fish b/.config/fish/conf.d/zoxide.fish new file mode 100644 index 0000000..fa10e76 --- /dev/null +++ b/.config/fish/conf.d/zoxide.fish @@ -0,0 +1,100 @@ +# ============================================================================= +# +# Utility functions for zoxide. +# + +# pwd based on the value of _ZO_RESOLVE_SYMLINKS. +function __zoxide_pwd + builtin pwd -L +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 + __zoxide_cd_internal $argv +end + +# ============================================================================= +# +# Hook configuration for zoxide. +# + +# Initialize hook to add new entries to the database. +function __zoxide_hook --on-variable PWD + test -z "$fish_private_mode" + and command zoxide add -- (__zoxide_pwd) +end + +# ============================================================================= +# +# 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 + +# ============================================================================= +# +# Commands for zoxide. Disable these using --no-cmd. +# + +abbr --erase cd &>/dev/null +alias cd=__zoxide_z + +abbr --erase cdi &>/dev/null +alias cdi=__zoxide_zi + +set -gx _ZO_EXCLUDE_DIRS "$HOME/media:$HOME/media/*" diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 55297a1..47a2eaf 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -28,6 +28,7 @@ if status is-interactive eza --tree --color=always $argv | bat --wrap=never end +<<<<<<< HEAD ## Directory jumping with frecency function fre_after_cd --on-variable PWD @@ -40,6 +41,30 @@ if status is-interactive commandline -f repaint end bind \cg jump +||||||| parent of 931ae14 (fish: use zoxide instead of fre + fzf) + function rg --wraps rg --description 'ripgrep with bat' + /usr/bin/rg --color=always $argv | bat --wrap=never + end + + ## Directory jumping with frecency + + function fre_after_cd --on-variable PWD + fre --add "$PWD" + end + + function jump + set _dir $(fre --sorted | fzf --no-sort --border=rounded --layout=reverse '--bind=ctrl-g:become(br -f --conf ~/.config/broot/select.hjson $(git rev-parse --show-toplevel 2>/dev/null || pwd))') + [ -n "$_dir" ] && pushd $_dir >>/dev/null + commandline -f repaint + end + bind \cg jump +======= + function rg --wraps rg --description 'ripgrep with bat' + /usr/bin/rg --color=always $argv | bat --wrap=never + end + + bind \cg __zoxide_zi +>>>>>>> 931ae14 (fish: use zoxide instead of fre + fzf) function git_jump set _dir $(git rev-parse --show-toplevel 2>/dev/null || pwd)