Improve forgit::diff

* Show additional context on enter compared to preview
* Show selected diff range in fzf prompt
This commit is contained in:
carlfriedrich 2022-07-17 16:21:13 +02:00
parent bd8fce74a6
commit bb4514a359
2 changed files with 14 additions and 7 deletions

View file

@ -102,13 +102,16 @@ function forgit::diff -d "git diff viewer" --argument-names arg1 arg2
end
end
set preview "forgit::extract_file {} | xargs git diff --color=always $commits -- | $forgit_diff_pager"
set preview_cmd "forgit::extract_file {} | xargs -I% git diff --color=always $commits -- % | $forgit_diff_pager"
# Show additional context on enter compared to preview
set enter_cmd "forgit::extract_file {} | xargs -I% git diff --color=always -U10000 $commits -- % | $forgit_diff_pager"
set opts "
$FORGIT_FZF_DEFAULT_OPTS
+m -0 --bind=\"enter:execute($preview |env LESS='-r' less)\"
--preview=\"$preview\"
+m -0 --bind=\"enter:execute($enter_cmd | env LESS='-r' less)\"
--preview=\"$preview_cmd\"
$FORGIT_DIFF_FZF_OPTS
--prompt=\"$commits > \"
"
eval git diff --name-status $commits -- $files* |

View file

@ -54,12 +54,16 @@ forgit::diff() {
fi
}
repo="$(git rev-parse --show-toplevel)"
cmd="cd '$repo' && echo {} |sed 's/.*] *//' | sed 's/ -> / /' |xargs -I% git diff --color=always $commits -- % | $forgit_diff_pager"
get_files="cd '$repo' && echo {} | sed 's/.*] *//' | sed 's/ -> / /'"
preview_cmd="$get_files | xargs -I% git diff --color=always $commits -- % | $forgit_diff_pager"
# Show additional context on enter compared to preview
enter_cmd="$get_files | xargs -I% git diff --color=always -U10000 $commits -- % | $forgit_diff_pager"
opts="
$FORGIT_FZF_DEFAULT_OPTS
+m -0 --bind=\"enter:execute($cmd |LESS='-r' less)\"
--preview=\"$cmd\"
+m -0 --bind=\"enter:execute($enter_cmd | LESS='-r' less)\"
--preview=\"$preview_cmd\"
$FORGIT_DIFF_FZF_OPTS
--prompt=\"$commits > \"
"
eval "git diff --name-status $commits -- ${files[*]} | sed -E 's/^([[:alnum:]]+)[[:space:]]+(.*)$/[\1]\t\2/'" |
sed 's/\t/ -> /2' | expand -t 8 |