From 1c71c32b29100b3e2989447da9d94b97b2c9959e Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Wed, 8 Nov 2023 06:29:58 +0800 Subject: [PATCH] fix(job-control): make jobwait() flush UI after hiding cursor (#25927) --- src/nvim/eval/funcs.c | 1 + test/functional/core/job_spec.lua | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 505a91813a..550d296093 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -4187,6 +4187,7 @@ static void f_jobwait(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) } ui_busy_start(); + ui_flush(); list_T *args = argvars[0].vval.v_list; Channel **jobs = xcalloc((size_t)tv_list_len(args), sizeof(*jobs)); MultiQueue *waiting_jobs = multiqueue_new_parent(loop_on_put, &main_loop); diff --git a/test/functional/core/job_spec.lua b/test/functional/core/job_spec.lua index 613dff577a..befbd4bc3b 100644 --- a/test/functional/core/job_spec.lua +++ b/test/functional/core/job_spec.lua @@ -700,7 +700,7 @@ describe('jobs', function() os.remove('Xtest_jobstart_env') end) - describe('jobwait', function() + describe('jobwait()', function() before_each(function() if is_os('win') then helpers.set_shell_powershell() @@ -874,6 +874,27 @@ describe('jobs', function() eq({'notification', 'wait', {{-1, -1}}}, next_msg()) end) end) + + it('hides cursor when waiting', function() + local screen = Screen.new(30, 3) + screen:set_default_attr_ids({ + [0] = {foreground = Screen.colors.Blue1, bold = true}; + }) + screen:attach() + command([[let g:id = jobstart([v:progpath, '--clean', '--headless'])]]) + feed_command('call jobwait([g:id], 300)') + screen:expect{grid=[[ + | + {0:~ }| + :call jobwait([g:id], 300) | + ]], timeout=100} + funcs.jobstop(meths.get_var('id')) + screen:expect{grid=[[ + ^ | + {0:~ }| + :call jobwait([g:id], 300) | + ]]} + end) end) pending('exit event follows stdout, stderr', function()