]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1518: search stats not always visible when searching backwards v9.0.1518
authorChristian Brabandt <cb@256bit.org>
Sat, 6 May 2023 18:20:20 +0000 (19:20 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 6 May 2023 18:20:20 +0000 (19:20 +0100)
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 #12322, closes #12222)

src/option.h
src/search.c
src/testdir/dumps/Test_searchstat_back_1.dump [new file with mode: 0644]
src/testdir/dumps/Test_searchstat_back_2.dump [new file with mode: 0644]
src/testdir/dumps/Test_searchstat_back_3.dump [new file with mode: 0644]
src/testdir/test_search_stat.vim
src/version.c

index 487d87c319ef1413ee31446c7973036f1a5605b6..1dc9d51f840a6257842047db3b1125c572624192 100644 (file)
@@ -268,7 +268,7 @@ typedef enum {
 #define SHM_COMPLETIONSCAN  'C'                // completion scanning messages
 #define SHM_RECORDING  'q'             // short recording message
 #define SHM_FILEINFO   'F'             // no file info messages
-#define SHM_SEARCHCOUNT  'S'           // search stats: '[1/10]'
+#define SHM_SEARCHCOUNT  'S'           // no search stats: '[1/10]'
 #define SHM_POSIX       "AS"           // POSIX value
 #define SHM_ALL                "rmfixlnwaWtToOsAIcCqFS" // all possible flags for 'shm'
 #define SHM_LEN                30              // max length of all flags together
index 5e38570780319e0bf59b482cd2261b04c2f90fac..793e042341d69ff3d9396197a8ed592e391c7b8f 100644 (file)
@@ -1089,7 +1089,9 @@ searchit(
 
            /*
             * 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.
@@ -1098,7 +1100,9 @@ searchit(
                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((char_u *)_(dir == BACKWARD
                                          ? top_bot_msg : bot_top_msg), TRUE);
            if (extra_arg != NULL)
@@ -3237,8 +3241,10 @@ update_search_stat(
        lbuf = curbuf;
     }
 
+    // when searching backwards and having jumped to the first occurrence,
+    // cur must remain greater than 1
     if (EQUAL_POS(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
     {
diff --git a/src/testdir/dumps/Test_searchstat_back_1.dump b/src/testdir/dumps/Test_searchstat_back_1.dump
new file mode 100644 (file)
index 0000000..4b2808b
--- /dev/null
@@ -0,0 +1,10 @@
+>t+0&#ffffff0|e|s|t| @70
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|/+0#0000000&|\|<|t|e|s|t|\|>| @30|[|1|/|1|]| @11|1|,|1| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_searchstat_back_2.dump b/src/testdir/dumps/Test_searchstat_back_2.dump
new file mode 100644 (file)
index 0000000..b3c44b0
--- /dev/null
@@ -0,0 +1,10 @@
+>t+0&#ffffff0|e|s|t| @70
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|?+0#0000000&|\|<|t|e|s|t|\|>| @30|[|1|/|1|]| @11|1|,|1| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_searchstat_back_3.dump b/src/testdir/dumps/Test_searchstat_back_3.dump
new file mode 100644 (file)
index 0000000..ddc3b3d
--- /dev/null
@@ -0,0 +1,10 @@
+>t+0&#ffffff0|e|s|t| @70
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|s+0#e000002&|e|a|r|c|h| |h|i|t| |T|O|P|,| |c|o|n|t|i|n|u|i|n|g| |a|t| |B|O|T@1|O|M| +0#0000000&@20|1|,|1| @10|A|l@1| 
index e205df574b5ec2a9752e594c6c0f35dd7092363a..b57b7ba7b09312a4f3a13214be7a322df59c464e 100644 (file)
@@ -153,7 +153,6 @@ func Test_search_stat()
     let g:a = execute(':unsilent :norm! n')
     let stat = 'W \[20/1\]'
     call assert_match(pat .. stat, g:a)
-    call assert_match('search hit BOTTOM, continuing at TOP', g:a)
     set norl
   endif
 
@@ -164,7 +163,6 @@ func Test_search_stat()
   let g:a = execute(':unsilent :norm! N')
   let stat = 'W \[20/20\]'
   call assert_match(pat .. stat, g:a)
-  call assert_match('search hit TOP, continuing at BOTTOM', g:a)
   call assert_match('W \[20/20\]', Screenline(&lines))
 
   " normal, no match
@@ -432,5 +430,33 @@ func Test_search_stat_and_incsearch()
   call StopVimInTerminal(buf)
 endfunc
 
+func Test_search_stat_backwards()
+  CheckScreendump
+
+  let lines =<< trim END
+    set shm-=S
+    call setline(1, ['test', ''])
+  END
+  call writefile(lines, 'Xsearchstat_back', 'D')
+
+  let buf = RunVimInTerminal('-S Xsearchstat_back', #{rows: 10})
+  call term_sendkeys(buf, "*")
+  call TermWait(buf)
+  call VerifyScreenDump(buf, 'Test_searchstat_back_1', {})
+
+  call term_sendkeys(buf, "N")
+  call TermWait(buf)
+  call VerifyScreenDump(buf, 'Test_searchstat_back_2', {})
+
+  call term_sendkeys(buf, ":set shm+=S\<cr>N")
+  call TermWait(buf)
+  " shows "Search Hit Bottom.."
+  call VerifyScreenDump(buf, 'Test_searchstat_back_3', {})
+
+  call term_sendkeys(buf, "\<esc>:qa\<cr>")
+  call TermWait(buf)
+
+  call StopVimInTerminal(buf)
+endfunc
 
 " vim: shiftwidth=2 sts=2 expandtab
index dc17976de8809a6e4955633dab11e68e3320b627..cf3532434c23e11d329e926d5779e24798fdbd13 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1518,
 /**/
     1517,
 /**/