51 lines
1.4 KiB
Bash
51 lines
1.4 KiB
Bash
# inspired by https://oppi.li/posts/jjj/
|
|
# using what i made for
|
|
# - https://git.pvv.ntnu.no/pederbs/just-nixpkgs
|
|
# - https://git.pvv.ntnu.no/pederbs/config/src/commit/5a2927372b180d7bfcf67f93151f3756bc4f26df/users/pbsds/home/profiles/headless/fzf.nix
|
|
|
|
# TODO: use gum/fzf to make a menu with various modes
|
|
# * [ ] mode with git log --oneline --all
|
|
# * [ ] mode with branches/tags
|
|
# * [ ] mode with commit from a specific branch/tag
|
|
# * [ ] mode with commit ranges (aaa..bbb)
|
|
# * [ ] mode with multiple commits in single command
|
|
# * [ ] mode with multiple commits across multiple command like https://arch1t3cht.org/blog/jjjj/
|
|
|
|
if command -v git >/dev/null \
|
|
&& command -v fzf >/dev/null \
|
|
&& command -v cut >/dev/null \
|
|
&& command -v head >/dev/null
|
|
then
|
|
|
|
fgit() {
|
|
local -a git_color=()
|
|
if [[ -t 2 ]]; then
|
|
git_color+=( --color=always )
|
|
fi
|
|
|
|
local -a fzf_args=(
|
|
--height=15
|
|
# --multi
|
|
|
|
--reverse
|
|
--bind 'home:first'
|
|
--bind 'end:last'
|
|
--cycle
|
|
--ansi
|
|
--prompt "git $* "
|
|
--preview 'git show "$(cut -d" " -f1 <<< {} )" '"${git_color[*]}"' --stat | head -n$FZF_PREVIEW_LINES'
|
|
--preview-window follow
|
|
)
|
|
|
|
local commit_id="$( git log --oneline "${git_color[@]}" | fzf "${fzf_args[@]}" | cut -d" " -f1 )"
|
|
|
|
if [[ -n "$commit_id" ]]; then
|
|
# recreate 'set -x' to avoid a subshell
|
|
>&2 echo "+$(printf " %q" git "$@" "$commit_id")"
|
|
|
|
git "$@" "$commit_id"
|
|
fi
|
|
}
|
|
|
|
fi
|