mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 14:08:32 +00:00
vim-patch:9.1.1009: diff feature can be improved
Problem: diff feature can be improved
Solution: include the linematch diff alignment algorithm
(Jonathon)
closes: vim/vim#9661
7c7a4e6d1a
Co-authored-by: Jonathon <jonathonwhite@protonmail.com>
This commit is contained in:
@@ -1820,7 +1820,8 @@ static void find_top_diff_block(diff_T **thistopdiff, diff_T **nextblockblock, i
|
||||
topdiffchange = 0;
|
||||
}
|
||||
|
||||
// check if the fromwin topline is matched by the current diff. if so, set it to the top of the diff block
|
||||
// check if the fromwin topline is matched by the current diff. if so,
|
||||
// set it to the top of the diff block
|
||||
if (topline >= topdiff->df_lnum[fromidx] && topline <=
|
||||
(topdiff->df_lnum[fromidx] + topdiff->df_count[fromidx])) {
|
||||
// this line is inside the current diff block, so we will save the
|
||||
@@ -2021,10 +2022,15 @@ static void run_linematch_algorithm(diff_T *dp)
|
||||
size_t ndiffs = 0;
|
||||
for (int i = 0; i < DB_COUNT; i++) {
|
||||
if (curtab->tp_diffbuf[i] != NULL) {
|
||||
// write the contents of the entire buffer to
|
||||
// diffbufs_mm[diffbuffers_count]
|
||||
diff_write_buffer(curtab->tp_diffbuf[i], &diffbufs_mm[ndiffs],
|
||||
dp->df_lnum[i], dp->df_lnum[i] + dp->df_count[i] - 1);
|
||||
if (dp->df_count[i] > 0) {
|
||||
// write the contents of the entire buffer to
|
||||
// diffbufs_mm[diffbuffers_count]
|
||||
diff_write_buffer(curtab->tp_diffbuf[i], &diffbufs_mm[ndiffs],
|
||||
dp->df_lnum[i], dp->df_lnum[i] + dp->df_count[i] - 1);
|
||||
} else {
|
||||
diffbufs_mm[ndiffs].size = 0;
|
||||
diffbufs_mm[ndiffs].ptr = NULL;
|
||||
}
|
||||
|
||||
diffbufs[ndiffs] = &diffbufs_mm[ndiffs];
|
||||
|
||||
@@ -2060,6 +2066,12 @@ static void run_linematch_algorithm(diff_T *dp)
|
||||
/// Returns > 0 for inserting that many filler lines above it (never happens
|
||||
/// when 'diffopt' doesn't contain "filler").
|
||||
/// This should only be used for windows where 'diff' is set.
|
||||
/// When diffopt contains linematch, a changed/added/deleted line
|
||||
/// may also have filler lines above it. In such a case, the possibilities
|
||||
/// are no longer mutually exclusive. The number of filler lines is
|
||||
/// returned from diff_check, and the integer 'linestatus' passed by
|
||||
/// pointer is set to -1 to indicate a changed line, and -2 to indicate an
|
||||
/// added line
|
||||
///
|
||||
/// @param wp
|
||||
/// @param lnum
|
||||
|
Reference in New Issue
Block a user