fgit
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user