Merge pull request #27858 from luukvbaal/nvim_set_cursor

fix(ui): issues controlling cursor position with ext_cmdline
This commit is contained in:
bfredl 2024-03-15 10:02:26 +01:00 committed by GitHub
commit f1c9228bba
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 41 additions and 4 deletions

View File

@ -148,7 +148,7 @@ void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
switchwin_T switchwin; switchwin_T switchwin;
switch_win(&switchwin, win, NULL, true); switch_win(&switchwin, win, NULL, true);
update_topline(curwin); update_topline(curwin);
validate_cursor(curwin); setcursor_mayforce(true);
restore_win(&switchwin, true); restore_win(&switchwin, true);
redraw_later(win, UPD_VALID); redraw_later(win, UPD_VALID);

View File

@ -767,7 +767,7 @@ static uint8_t *command_line_enter(int firstc, int count, int indent, bool clear
} }
setmouse(); setmouse();
ui_cursor_shape(); // may show different cursor shape setcursor();
TryState tstate; TryState tstate;
Error err = ERROR_INIT; Error err = ERROR_INIT;
@ -927,7 +927,6 @@ static uint8_t *command_line_enter(int firstc, int count, int indent, bool clear
} }
may_trigger_modechanged(); may_trigger_modechanged();
setmouse(); setmouse();
ui_cursor_shape(); // may show different cursor shape
sb_text_end_cmdline(); sb_text_end_cmdline();
theend: theend:
@ -3859,7 +3858,6 @@ void cursorcmd(void)
if (ccline.redraw_state < kCmdRedrawPos) { if (ccline.redraw_state < kCmdRedrawPos) {
ccline.redraw_state = kCmdRedrawPos; ccline.redraw_state = kCmdRedrawPos;
} }
setcursor();
return; return;
} }
@ -4553,6 +4551,7 @@ static int open_cmdwin(void)
State = save_State; State = save_State;
may_trigger_modechanged(); may_trigger_modechanged();
setmouse(); setmouse();
setcursor();
return cmdwin_result; return cmdwin_result;
} }

View File

@ -219,6 +219,21 @@ describe('API/win', function()
-- curwin didn't change back -- curwin didn't change back
neq(win, curwin()) neq(win, curwin())
-- shows updated position after getchar() #20793
feed(':call getchar()<CR>')
api.nvim_win_set_cursor(win, { 1, 5 })
screen:expect {
grid = [[
|
{1:~ }|*2
{2:[No Name] }|
prolo^gue |
|*2
{3:[No Name] [+] }|
:call getchar() |
]],
}
end) end)
it('remembers what column it wants to be in', function() it('remembers what column it wants to be in', function()

View File

@ -824,6 +824,29 @@ local function test_cmdline(linegrid)
| |
]]) ]])
end) end)
it('does not move cursor to curwin #20309', function()
local win = api.nvim_get_current_win()
command('norm icmdlinewin')
command('new')
command('norm icurwin')
feed(':')
api.nvim_win_set_cursor(win, { 1, 7 })
screen:expect {
grid = [[
curwin |
{3:[No Name] [+] }|
cmdline^win |
{2:[No Name] [+] }|
|
]],
cmdline = { {
content = { { '' } },
firstc = ':',
pos = 0,
} },
}
end)
end end
-- the representation of cmdline and cmdline_block contents changed with ext_linegrid -- the representation of cmdline and cmdline_block contents changed with ext_linegrid