patch 8.2.4723: the ModeChanged autocmd event is inefficient
Problem: The ModeChanged autocmd event is inefficient.
Solution: Avoid allocating memory. (closes #10134) Rename
trigger_modechanged() to may_trigger_modechanged().
diff --git a/src/normal.c b/src/normal.c
index e39fb77..d7a2857 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -689,7 +689,7 @@
# endif
}
#endif
- trigger_modechanged();
+ may_trigger_modechanged();
// When not finishing an operator and no register name typed, reset the
// count.
@@ -971,7 +971,7 @@
c = finish_op;
#endif
finish_op = FALSE;
- trigger_modechanged();
+ may_trigger_modechanged();
#ifdef CURSOR_SHAPE
// Redraw the cursor with another shape, if we were in Operator-pending
// mode or did a replace command.
@@ -1027,7 +1027,7 @@
if (restart_VIsual_select == 1)
{
VIsual_select = TRUE;
- trigger_modechanged();
+ may_trigger_modechanged();
showmode();
restart_VIsual_select = 0;
VIsual_select_reg = 0;
@@ -1151,7 +1151,7 @@
may_clear_cmdline();
adjust_cursor_eol();
- trigger_modechanged();
+ may_trigger_modechanged();
}
/*
@@ -3222,7 +3222,7 @@
if (VIsual_active) // toggle Selection/Visual mode
{
VIsual_select = !VIsual_select;
- trigger_modechanged();
+ may_trigger_modechanged();
showmode();
}
else if (!checkclearop(cap->oap))
@@ -3285,7 +3285,7 @@
if (VIsual_active && VIsual_select)
{
VIsual_select = FALSE;
- trigger_modechanged();
+ may_trigger_modechanged();
showmode();
restart_VIsual_select = 2; // restart Select mode later
}
@@ -5422,7 +5422,7 @@
{ // or char/line mode
VIsual_mode = cap->cmdchar;
showmode();
- trigger_modechanged();
+ may_trigger_modechanged();
}
redraw_curbuf_later(INVERTED); // update the inversion
}
@@ -5549,7 +5549,7 @@
foldAdjustVisual();
#endif
- trigger_modechanged();
+ may_trigger_modechanged();
setmouse();
#ifdef FEAT_CONCEAL
// Check if redraw is needed after changing the state.