diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c index 8f4fe8ce04..088cf4f2dc 100644 --- a/src/nvim/drawscreen.c +++ b/src/nvim/drawscreen.c @@ -272,7 +272,7 @@ void screenclear(void) /// to be re-emitted: avoid clearing the prompt from the message grid. static bool cmdline_number_prompt(void) { - return !ui_has(kUIMessages) && State == MODE_CMDLINE && get_cmdline_info()->mouse_used != NULL; + return !ui_has(kUIMessages) && (State & MODE_CMDLINE) && get_cmdline_info()->mouse_used != NULL; } /// Set dimensions of the Nvim application "screen". @@ -374,8 +374,8 @@ void screen_resize(int width, int height) // - in Ex mode, don't redraw anything. // - Otherwise, redraw right now, and position the cursor. if (State == MODE_ASKMORE || State == MODE_EXTERNCMD || exmode_active - || (State == MODE_CMDLINE && get_cmdline_info()->one_key)) { - if (State == MODE_CMDLINE) { + || ((State & MODE_CMDLINE) && get_cmdline_info()->one_key)) { + if (State & MODE_CMDLINE) { update_screen(); } if (msg_grid.chars) { diff --git a/src/nvim/message.c b/src/nvim/message.c index 049295e9ea..2372c0b26a 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -3062,7 +3062,7 @@ void repeat_message(void) if (State == MODE_ASKMORE) { msg_moremsg(true); // display --more-- message again msg_row = Rows - 1; - } else if (State == MODE_CMDLINE && confirm_msg != NULL) { + } else if ((State & MODE_CMDLINE) && confirm_msg != NULL) { display_confirm_msg(); // display ":confirm" message again msg_row = Rows - 1; } else if (State == MODE_EXTERNCMD) { diff --git a/src/nvim/state.c b/src/nvim/state.c index 776672884f..635793162c 100644 --- a/src/nvim/state.c +++ b/src/nvim/state.c @@ -185,11 +185,11 @@ void get_mode(char *buf) int i = 0; if (State == MODE_HITRETURN || State == MODE_ASKMORE || State == MODE_SETWSIZE - || (State == MODE_CMDLINE && get_cmdline_info()->one_key)) { + || ((State & MODE_CMDLINE) && get_cmdline_info()->one_key)) { buf[i++] = 'r'; if (State == MODE_ASKMORE) { buf[i++] = 'm'; - } else if (State == MODE_CMDLINE) { + } else if (State & MODE_CMDLINE) { buf[i++] = '?'; } } else if (State == MODE_EXTERNCMD) { diff --git a/src/nvim/ui.c b/src/nvim/ui.c index f180806b14..0dce3fdd0d 100644 --- a/src/nvim/ui.c +++ b/src/nvim/ui.c @@ -541,7 +541,7 @@ void ui_flush(void) cmdline_ui_flush(); - if (State != MODE_CMDLINE && curwin->w_floating && curwin->w_config.hide) { + if (!(State & MODE_CMDLINE) && curwin->w_floating && curwin->w_config.hide) { if (!was_busy) { ui_call_busy_start(); was_busy = true; diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index 187e01cca4..56d0a30aa2 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -1141,6 +1141,16 @@ describe('cmdline redraw', function() ]]) command('redraw') screen:expect_unchanged() + + command('set keymap=dvorak') + feed('') + command('redraw') + screen:expect_unchanged() + + feed('') + command('set keymap&') + command('redraw') + screen:expect_unchanged() end) it('substitute confirm prompt does not scroll', function() diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index 747e815944..8dce38ff3f 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -9587,6 +9587,15 @@ describe('float window', function() ]] }) end + + command('set keymap=dvorak') + feed('') + screen:expect_unchanged() + + feed('') + command('set keymap&') + screen:expect_unchanged() + feed('') -- Show cursor after switching to a normal window (hide=false). diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua index 288b28e42d..4a412c524f 100644 --- a/test/functional/ui/screen.lua +++ b/test/functional/ui/screen.lua @@ -365,7 +365,7 @@ for _, v in ipairs(ext_keys) do expect_keys[v] = true end ---- @class test.function.ui.screen.Expect +--- @class test.functional.ui.screen.Expect --- --- Expected screen state (string). Each line represents a screen --- row. Last character of each row (typically "|") is stripped. @@ -460,7 +460,7 @@ end --- or keyword args (supports more options): --- screen:expect({ grid=[[...]], cmdline={...}, condition=function() ... end }) --- ---- @param expected string|function|test.function.ui.screen.Expect +--- @param expected string|function|test.functional.ui.screen.Expect --- @param attr_ids? table> function Screen:expect(expected, attr_ids, ...) --- @type string, fun()