0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.1.0402: the DiffUpdate event isn't triggered for :diffput

Problem:    The DiffUpdate event isn't triggered for :diffput.
Solution:   Also trigger DiffUpdate for :diffget and :diffput.
This commit is contained in:
Bram Moolenaar
2018-09-18 21:20:26 +02:00
parent 110bd60985
commit 198fa066b2
2 changed files with 27 additions and 14 deletions

View File

@@ -295,7 +295,7 @@ diff_mark_adjust_tp(
if (diff_internal())
{
// Will udpate diffs before redrawing. Set _invalid to update the
// Will update diffs before redrawing. Set _invalid to update the
// diffs themselves, set _update to also update folds properly just
// before redrawing.
tp->tp_diff_invalid = TRUE;
@@ -908,6 +908,7 @@ ex_diffupdate(exarg_T *eap) // "eap" can be NULL
int idx_orig;
int idx_new;
diffio_T diffio;
int had_diffs = curtab->tp_first_diff != NULL;
if (diff_busy)
{
@@ -924,14 +925,14 @@ ex_diffupdate(exarg_T *eap) // "eap" can be NULL
if (curtab->tp_diffbuf[idx_orig] != NULL)
break;
if (idx_orig == DB_COUNT)
return;
goto theend;
// Only need to do something when there is another buffer.
for (idx_new = idx_orig + 1; idx_new < DB_COUNT; ++idx_new)
if (curtab->tp_diffbuf[idx_new] != NULL)
break;
if (idx_new == DB_COUNT)
return;
goto theend;
// Only use the internal method if it did not fail for one of the buffers.
vim_memset(&diffio, 0, sizeof(diffio));
@@ -948,9 +949,14 @@ ex_diffupdate(exarg_T *eap) // "eap" can be NULL
// force updating cursor position on screen
curwin->w_valid_cursor.lnum = 0;
theend:
// A redraw is needed if there were diffs and they were cleared, or there
// are diffs now, which means they got updated.
if (had_diffs || curtab->tp_first_diff != NULL)
{
diff_redraw(TRUE);
apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
}
}
/*
@@ -2272,7 +2278,8 @@ diffopt_changed(void)
if ((diff_flags_new & DIFF_HORIZONTAL) && (diff_flags_new & DIFF_VERTICAL))
return FAIL;
/* If "icase" or "iwhite" was added or removed, need to update the diff. */
// If flags were added or removed, or the algorithm was changed, need to
// update the diff.
if (diff_flags != diff_flags_new || diff_algorithm != diff_algorithm_new)
FOR_ALL_TABPAGES(tp)
tp->tp_diff_invalid = TRUE;
@@ -2845,14 +2852,18 @@ theend:
diff_need_update = FALSE;
ex_diffupdate(NULL);
}
/* Check that the cursor is on a valid character and update it's position.
* When there were filler lines the topline has become invalid. */
else
{
// Check that the cursor is on a valid character and update it's
// position. When there were filler lines the topline has become
// invalid.
check_cursor();
changed_line_abv_curs();
/* Also need to redraw the other buffers. */
// Also need to redraw the other buffers.
diff_redraw(FALSE);
apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
}
}
#ifdef FEAT_FOLDING

View File

@@ -794,6 +794,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
402,
/**/
401,
/**/