diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-05-24 22:08:15 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-05-24 22:08:15 +0200 |
commit | 8f46e4c4bde13fd5ad68a6670b79cc462b65fbec (patch) | |
tree | fd1171bb8285f800b7621411d9ba742d2e5f6e39 /src/search.c | |
parent | 7b31a181c84ec6b9050892e80f3132907569f8d8 (diff) | |
download | vim-git-8f46e4c4bde13fd5ad68a6670b79cc462b65fbec.tar.gz |
patch 8.1.1390: search stats are off when using count or offsetv8.1.1390
Problem: Search stats are off when using count or offset.
Solution: Recompute the stats when needed. (Masato Nishihata, closes #4410)
Diffstat (limited to 'src/search.c')
-rw-r--r-- | src/search.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/search.c b/src/search.c index bbe370356..313892f70 100644 --- a/src/search.c +++ b/src/search.c @@ -26,7 +26,7 @@ static void show_pat_in_path(char_u *, int, #ifdef FEAT_VIMINFO static void wvsp_one(FILE *fp, int idx, char *s, int sc); #endif -static void search_stat(int dirc, pos_T *pos, int show_top_bot_msg, char_u *msgbuf); +static void search_stat(int dirc, pos_T *pos, int show_top_bot_msg, char_u *msgbuf, int recompute); /* * This file contains various searching-related routines. These fall into @@ -1219,6 +1219,7 @@ do_search( char_u *ps; char_u *msgbuf = NULL; size_t len; + int has_offset = FALSE; #define SEARCH_STAT_BUF_LEN 12 /* @@ -1550,6 +1551,8 @@ do_search( */ if (!(options & SEARCH_NOOF) || (pat != NULL && *pat == ';')) { + pos_T org_pos = pos; + if (spats[0].off.line) /* Add the offset to the line number. */ { c = pos.lnum + spats[0].off.off; @@ -1581,6 +1584,8 @@ do_search( break; } } + if (!EQUAL_POS(pos, org_pos)) + has_offset = TRUE; } // Show [1/15] if 'S' is not in 'shortmess'. @@ -1590,7 +1595,8 @@ do_search( && c != FAIL && !shortmess(SHM_SEARCHCOUNT) && msgbuf != NULL) - search_stat(dirc, &pos, show_top_bot_msg, msgbuf); + search_stat(dirc, &pos, show_top_bot_msg, msgbuf, + (count != 1 || has_offset)); /* * The search command can be followed by a ';' to do another search. @@ -4915,13 +4921,15 @@ linewhite(linenr_T lnum) /* * Add the search count "[3/19]" to "msgbuf". + * When "recompute" is TRUE always recompute the numbers. */ static void search_stat( int dirc, pos_T *pos, int show_top_bot_msg, - char_u *msgbuf) + char_u *msgbuf, + int recompute) { int save_ws = p_ws; int wraparound = FALSE; @@ -4947,7 +4955,7 @@ search_stat( && MB_STRNICMP(lastpat, spats[last_idx].pat, STRLEN(lastpat)) == 0 && STRLEN(lastpat) == STRLEN(spats[last_idx].pat) && EQUAL_POS(lastpos, curwin->w_cursor) - && lbuf == curbuf) || wraparound || cur < 0 || cur > 99) + && lbuf == curbuf) || wraparound || cur < 0 || cur > 99 || recompute) { cur = 0; cnt = 0; |