From 73ae7d44a281a543f902f0dea111713c06490079 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Mon, 8 Jul 2024 10:36:41 +0800 Subject: [PATCH] fix(quickfix): make shortmess+=O work with cmdheight=0 (#29609) --- src/nvim/globals.h | 3 +-- src/nvim/quickfix.c | 6 ++--- .../ex_cmds/quickfix_commands_spec.lua | 22 ++++++++++++++++++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/nvim/globals.h b/src/nvim/globals.h index 410e8f2e7c..3e83911e86 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -146,8 +146,7 @@ EXTERN hlf_T edit_submode_highl; // highl. method for extra info EXTERN bool cmdmsg_rl INIT( = false); // cmdline is drawn right to left EXTERN int msg_col; EXTERN int msg_row; -EXTERN int msg_scrolled; // Number of screen lines that windows have - // scrolled because of printing messages. +EXTERN int msg_scrolled; ///< Number of screen lines that messages have scrolled. // when true don't set need_wait_return in msg_puts_attr() // when msg_scrolled is non-zero EXTERN bool msg_scrolled_ign INIT( = false); diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index ed3fd83fd5..21662264bc 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -2915,8 +2915,7 @@ static void qf_jump_print_msg(qf_info_T *qi, int qf_index, qfline_T *qf_ptr, buf { garray_T *const gap = qfga_get(); - // Update the screen before showing the message, unless the screen - // scrolled up. + // Update the screen before showing the message, unless messages scrolled. if (!msg_scrolled) { update_topline(curwin); if (must_redraw) { @@ -2938,7 +2937,8 @@ static void qf_jump_print_msg(qf_info_T *qi, int qf_index, qfline_T *qf_ptr, buf linenr_T i = msg_scroll; if (curbuf == old_curbuf && curwin->w_cursor.lnum == old_lnum) { msg_scroll = true; - } else if (!msg_scrolled && shortmess(SHM_OVERALL)) { + } else if ((msg_scrolled == 0 || (p_ch == 0 && msg_scrolled == 1)) + && shortmess(SHM_OVERALL)) { msg_scroll = false; } msg_ext_set_kind("quickfix"); diff --git a/test/functional/ex_cmds/quickfix_commands_spec.lua b/test/functional/ex_cmds/quickfix_commands_spec.lua index 3df41b015e..9c47b1f05f 100644 --- a/test/functional/ex_cmds/quickfix_commands_spec.lua +++ b/test/functional/ex_cmds/quickfix_commands_spec.lua @@ -185,6 +185,9 @@ describe('quickfix', function() it('BufAdd does not cause E16 when reusing quickfix buffer #18135', function() local file = file_base .. '_reuse_qfbuf_BufAdd' write_file(file, ('\n'):rep(100) .. 'foo') + finally(function() + os.remove(file) + end) source([[ set grepprg=internal autocmd BufAdd * call and(0, 0) @@ -192,7 +195,24 @@ describe('quickfix', function() ]]) command('grep foo ' .. file) command('grep foo ' .. file) - os.remove(file) + end) + + it('jump message does not scroll with cmdheight=0 and shm+=O #29597', function() + local screen = Screen.new(40, 6) + screen:attach() + command('set cmdheight=0') + local file = file_base .. '_reuse_qfbuf_BufAdd' + write_file(file, 'foobar') + finally(function() + os.remove(file) + end) + command('vimgrep /foo/gj ' .. file) + feed(':cc') + screen:expect([[ + ^foobar | + {1:~ }|*4 + (1 of 1): foobar | + ]]) end) end)