neovim

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

commit b47f3131515df91a4438adbc1ed2756a1fc453d7
parent 95b8e2c55f7d119497ec4008e564b2520c6d5e9b
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Sun, 26 Jun 2022 15:20:44 +0800

fix(getchar): flush screen before doing a blocking wait

Diffstat:
Msrc/nvim/eval/funcs.c | 2++
Mtest/functional/ui/messages_spec.lua | 13+++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c @@ -2722,6 +2722,8 @@ static void getchar_common(typval_T *argvars, typval_T *rettv) // getchar(): blocking wait. // TODO(bfredl): deduplicate shared logic with state_enter ? if (!char_avail()) { + // flush output before waiting + ui_flush(); (void)os_inchar(NULL, 0, -1, 0, main_loop.events); if (!multiqueue_empty(main_loop.events)) { state_handle_k_event(); diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua @@ -1243,6 +1243,19 @@ vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vim | ]]) end) + + it('echo messages are shown correctly when getchar() immediately follows', function() + feed([[:echo 'foo' | echo 'bar' | call getchar()<CR>]]) + screen:expect([[ + | + {1:~ }| + {1:~ }| + {1:~ }| + {3: }| + foo | + bar^ | + ]]) + end) end) describe('ui/ext_messages', function()