mirror of
https://github.com/neovim/neovim.git
synced 2025-09-14 07:18:17 +00:00
fix: address issues for BufModifiedSet
This commit is contained in:
@@ -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.
|
||||||
///
|
///
|
||||||
|
@@ -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);
|
||||||
|
@@ -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)
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user