From 6b832898b9ef2bb23062e1c8538acd213fe38c5a Mon Sep 17 00:00:00 2001 From: Ashish Ranjan Date: Sun, 2 Aug 2020 02:54:29 +0530 Subject: [PATCH] feat(bash-function): Add fzf_git_diff and gd bash alias --- src/shell/aliases/bash_aliases | 1 + src/shell/bash_functions | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/shell/aliases/bash_aliases b/src/shell/aliases/bash_aliases index 54927ac..2a99f64 100644 --- a/src/shell/aliases/bash_aliases +++ b/src/shell/aliases/bash_aliases @@ -50,6 +50,7 @@ alias ff="fzf_find_edit" alias ffg="fzf_grep_edit" alias ga="fzf_git_add" +alias gd="fzf_git_diff" alias gl="fzf_git_log" alias gpx="fzf_git_log_pickaxe" alias gr="fzf_git_reset" diff --git a/src/shell/bash_functions b/src/shell/bash_functions index eca83ec..879bf6b 100644 --- a/src/shell/bash_functions +++ b/src/shell/bash_functions @@ -101,6 +101,30 @@ fzf_git_add() { # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Fuzzy git diff + +fzf_git_diff() { + + # https://stackoverflow.com/a/45111524 + + local files=$( + git diff "$@" --name-only | + xargs -I '{}' realpath \ + --relative-to=. "$(git rev-parse --show-toplevel)"/'{}' | + fzf --ansi --no-sort --height 100% \ + --preview "echo {} | + xargs -I@ sh -c 'git d $* --color=always @'" + ) + + if [[ -n $files ]]; then + # shellcheck disable=SC2086 + git d "$@" $files + fi + +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Fuzzy search in git logs. fzf_git_log() {