fix: address issues for BufModifiedSet

This commit is contained in:
Rom Grk
2020-11-09 04:05:25 -05:00
parent 6b5975a1eb
commit 743f7c8f72
4 changed files with 10 additions and 9 deletions

View File

@@ -541,8 +541,9 @@ struct file_buffer {
int b_changed; // 'modified': Set to true if something in the int b_changed; // 'modified': Set to true if something in the
// file has been changed and not written out. // file has been changed and not written out.
bool b_changed_notified; // if the BufModified autocmd has been triggered bool b_changed_invalid; // Set if BufModified autocmd has not been
// since the last time b_changed was modified // triggered since the last time b_changed was
// modified.
/// Change-identifier incremented for each change, including undo. /// Change-identifier incremented for each change, including undo.
/// ///

View File

@@ -129,7 +129,7 @@ void changed(void)
void changed_internal(void) void changed_internal(void)
{ {
curbuf->b_changed = true; curbuf->b_changed = true;
curbuf->b_changed_notified = false; curbuf->b_changed_invalid = true;
ml_setflags(curbuf); ml_setflags(curbuf);
check_status(curbuf); check_status(curbuf);
redraw_tabline = true; redraw_tabline = true;
@@ -503,7 +503,7 @@ void unchanged(buf_T *buf, int ff, bool always_inc_changedtick)
{ {
if (buf->b_changed || (ff && file_ff_differs(buf, false))) { if (buf->b_changed || (ff && file_ff_differs(buf, false))) {
buf->b_changed = false; buf->b_changed = false;
buf->b_changed_notified = false; buf->b_changed_invalid = true;
ml_setflags(buf); ml_setflags(buf);
if (ff) { if (ff) {
save_file_ff(buf); save_file_ff(buf);

View File

@@ -1488,12 +1488,12 @@ static void ins_redraw(
do_autocmd_winscrolled(curwin); do_autocmd_winscrolled(curwin);
} }
// Trigger BufModified if b_changed_notified is false. // Trigger BufModified if b_changed_invalid is set.
if (ready && has_event(EVENT_BUFMODIFIEDSET) if (ready && has_event(EVENT_BUFMODIFIEDSET)
&& curbuf->b_changed_notified == false && curbuf->b_changed_invalid == true
&& !pum_visible()) { && !pum_visible()) {
apply_autocmds(EVENT_BUFMODIFIEDSET, NULL, NULL, false, curbuf); apply_autocmds(EVENT_BUFMODIFIEDSET, NULL, NULL, false, curbuf);
curbuf->b_changed_notified = true; curbuf->b_changed_invalid = false;
} }
if (curwin->w_p_cole > 0 && conceal_cursor_line(curwin) if (curwin->w_p_cole > 0 && conceal_cursor_line(curwin)

View File

@@ -1233,9 +1233,9 @@ static void normal_check_buffer_modified(NormalState *s)
{ {
// Trigger BufModified if b_modified changed // Trigger BufModified if b_modified changed
if (!finish_op && has_event(EVENT_BUFMODIFIEDSET) if (!finish_op && has_event(EVENT_BUFMODIFIEDSET)
&& curbuf->b_changed_notified == false) { && curbuf->b_changed_invalid == true) {
apply_autocmds(EVENT_BUFMODIFIEDSET, NULL, NULL, false, curbuf); apply_autocmds(EVENT_BUFMODIFIEDSET, NULL, NULL, false, curbuf);
curbuf->b_changed_notified = true; curbuf->b_changed_invalid = false;
} }
} }