From 9e34aa76c132b5637ed2f2dafa4487f4c850bf35 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 7 May 2023 07:57:29 +0800 Subject: vim-patch:9.0.1518: search stats not always visible when searching backwards (#23517) Problem: Search stats not always visible when searching backwards. Solution: Do not display the top/bot message on top of the search stats. (Christian Brabandt, closes vim/vim#12322, closes vim/vim#12222) https://github.com/vim/vim/commit/34a6a3617b5b6ce11372439f14762caddc4b0cea Co-authored-by: Christian Brabandt --- src/nvim/option_defs.h | 2 +- src/nvim/search.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index 944cc583b3..dc652054e8 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -259,7 +259,7 @@ enum { SHM_COMPLETIONSCAN = 'C', ///< Completion scanning messages. SHM_RECORDING = 'q', ///< Short recording message. SHM_FILEINFO = 'F', ///< No file info messages. - SHM_SEARCHCOUNT = 'S', ///< Search stats: '[1/10]' + SHM_SEARCHCOUNT = 'S', ///< No search stats: '[1/10]' SHM_LEN = 30, ///< Max length of all flags together plus a NUL character. }; /// Represented by 'a' flag. diff --git a/src/nvim/search.c b/src/nvim/search.c index 8f1e9148d4..d1a31a357f 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -913,19 +913,22 @@ int searchit(win_T *win, buf_T *buf, pos_T *pos, pos_T *end_pos, Direction dir, || found || loop) { break; } - // + // If 'wrapscan' is set we continue at the other end of the file. - // If 'shortmess' does not contain 's', we give a message. + // If 'shortmess' does not contain 's', we give a message, but + // only, if we won't show the search stat later anyhow, + // (so SEARCH_COUNT must be absent). // This message is also remembered in keep_msg for when the screen // is redrawn. The keep_msg is cleared whenever another message is // written. - // if (dir == BACKWARD) { // start second loop at the other end lnum = buf->b_ml.ml_line_count; } else { lnum = 1; } - if (!shortmess(SHM_SEARCH) && (options & SEARCH_MSG)) { + if (!shortmess(SHM_SEARCH) + && shortmess(SHM_SEARCHCOUNT) + && (options & SEARCH_MSG)) { give_warning(_(dir == BACKWARD ? top_bot_msg : bot_top_msg), true); } if (extra_arg != NULL) { @@ -2702,8 +2705,10 @@ static void update_search_stat(int dirc, pos_T *pos, pos_T *cursor_pos, searchst lbuf = curbuf; } + // when searching backwards and having jumped to the first occurrence, + // cur must remain greater than 1 if (equalpos(lastpos, *cursor_pos) && !wraparound - && (dirc == 0 || dirc == '/' ? cur < cnt : cur > 0)) { + && (dirc == 0 || dirc == '/' ? cur < cnt : cur > 1)) { cur += dirc == 0 ? 0 : dirc == '/' ? 1 : -1; } else { proftime_T start; -- cgit