neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit c971f538ab87b537ae4c97bd44167661c5691a2d
parent ca7dd33fa783181d62b0573082d2e691fcfc29d2
Author: Luuk van Baal <luukvbaal@gmail.com>
Date:   Thu, 14 Mar 2024 23:55:32 +0100

fix(api): update grid cursor in nvim_win_set_cursor()

Problem:  Cursor position set by nvim_win_set_cursor() is not reflected
          on the screen when followed by a blocking call like getchar().
Solution: Immediately update the cursor position on the grid.

Diffstat:
Msrc/nvim/api/window.c | 2+-
Mtest/functional/api/window_spec.lua | 15+++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c @@ -148,7 +148,7 @@ void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err) switchwin_T switchwin; switch_win(&switchwin, win, NULL, true); update_topline(curwin); - validate_cursor(curwin); + setcursor_mayforce(true); restore_win(&switchwin, true); redraw_later(win, UPD_VALID); diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua @@ -219,6 +219,21 @@ describe('API/win', function() -- curwin didn't change back 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) it('remembers what column it wants to be in', function()