dotfiles/files/config/fish/vcs.fish

70 lines
1.4 KiB
Fish

function __jj_in_repo
jj --ignore-working-copy --quiet root >>/dev/null 2>&1
end
function vcs_root
jj workspace root --ignore-working-copy 2>/dev/null || git rev-parse --show-toplevel 2>/dev/null || pwd
end
function vcs_broot
br (vcs_root)
commandline -f repaint
end
function vcs_jump
set _dir (vcs_root)
if [ "$_dir" = "$PWD" ]
set _dir (br -f --conf "$HOME/.config/broot/conf.toml")
end
[ -n "$_dir" ] && pushd $_dir >>/dev/null
commandline -f repaint
end
function vcs_status
if __jj_in_repo
echo
printf '\e[38;5;240m\u2504%.0s\e[0m' (seq 1 (tput cols)) '\n'
jj show --stat
printf '\e[38;5;240m\u2504%.0s\e[0m' (seq 1 (tput cols)) '\n'
jj log --ignore-working-copy --limit=20 -T builtin_log_comfortable -r "(main..@) | (main..@)-"
else
git status -sb
end
commandline -f repaint
end
function vcs_diff
if __jj_in_repo
jj show $argv
else
git diff --stat -p -C --color-words $argv
end
commandline -f repaint
end
function vcs_log
if __jj_in_repo
jj log --ignore-working-copy $argv
else
git diff --stat -p -C --color-words $argv
end
commandline -f repaint
end
# Abbreviations
abbr -a d vcs_diff
abbr -a s vcs_status
# Bindings
bind \c_ vcs_jump
bind \ea vcs_log
bind \ee vcs_broot
bind \eS vcs_diff
bind \es vcs_status
# jj completions
COMPLETE=fish jj | source