86d940c225
Our ":git blame" annotates each line with the most recent commit.
However often a line has been modified by several commits.
Introduce ":git blame-jump" which shows the commit that added the
line at cursor. Crucially, it works also in Git diff buffers, so it
can be used recursively to find the full history of a line.
To do the recursive blame from a diff, I need to navigate to the
old (deleted) version of a line. Since old and new line are usually
neighbors. Speed up the common scenario of finding the old version
by making ":git blame-jump" jump to the new version. This means the
initial diff view might not include the commit message etc. Compensate
this by showing the commit's date+author+subject in the status line.
Here are some test cases.
- run blame-jump after "git blame"
- create an uncommitted or unsaved line, run "git blame" and
"blame-jump" on the uncommitted line
- run blame-jump without running "git blame"
- run blame-jump in "git show"
- run blame-jump in "git diff HEAD"
- run blame-jump in "git diff --cached"
- run blame-jump in "git diff" (YMMV if there are cached changes,
could fix that)
Naming: there are some similar commands in the wild [1];
they are usually called "show-blamed" or similar, but they
don't jump to the corresponding line. Also our list of git
commands is getting a bit messy (especially the undocumented
show-diff/hide-diff/next-hunk/prev-hunk; subject first naming seems
better).
[1]:
|
||
---|---|---|
.. | ||
go | ||
python | ||
rust | ||
autorestore.asciidoc | ||
autorestore.kak | ||
autowrap.kak | ||
clang.kak | ||
comment.kak | ||
ctags.kak | ||
doc.asciidoc | ||
doc.kak | ||
format.kak | ||
git.kak | ||
grep.kak | ||
lint.asciidoc | ||
lint.kak | ||
make.kak | ||
man.kak | ||
menu.kak | ||
patch-range.pl | ||
patch.kak | ||
spell.kak |