changeset 17938:1e86f8b18a5d v8.1.1965

patch 8.1.1965: search count message is not displayed when using a mapping Commit: https://github.com/vim/vim/commit/359ad1a6f92d0d3b4b942ea003fb02dc57bbfc9e Author: Bram Moolenaar <Bram@vim.org> Date: Mon Sep 2 21:44:59 2019 +0200 patch 8.1.1965: search count message is not displayed when using a mapping Problem: The search count message is not displayed when using a mapping. (Gary Johnson) Solution: Ignore cmd_silent for showing the search count. (Christian Brabandt)
author Bram Moolenaar <Bram@vim.org>
date Mon, 02 Sep 2019 22:00:03 +0200
parents 846f904817c0
children 252ad11554ff
files src/search.c src/version.c
diffstat 2 files changed, 65 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/src/search.c
+++ b/src/search.c
@@ -1351,8 +1351,9 @@ do_search(
 	    pat = p;			    /* put pat after search command */
 	}
 
-	if ((options & SEARCH_ECHO) && messaging()
-					    && !cmd_silent && msg_silent == 0)
+	if ((options & SEARCH_ECHO) && messaging() &&
+		!msg_silent &&
+		(!cmd_silent || !shortmess(SHM_SEARCHCOUNT)))
 	{
 	    char_u	*trunc;
 	    char_u	off_buf[40];
@@ -1362,7 +1363,8 @@ do_search(
 	    msg_start();
 
 	    // Get the offset, so we know how long it is.
-	    if (spats[0].off.line || spats[0].off.end || spats[0].off.off)
+	    if (!cmd_silent &&
+		    (spats[0].off.line || spats[0].off.end || spats[0].off.off))
 	    {
 		p = off_buf;
 		*p++ = dirc;
@@ -1383,13 +1385,13 @@ do_search(
 	    else
 		p = searchstr;
 
-	    if (!shortmess(SHM_SEARCHCOUNT))
+	    if (!shortmess(SHM_SEARCHCOUNT) || cmd_silent)
 	    {
 		// Reserve enough space for the search pattern + offset +
 		// search stat.  Use all the space available, so that the
 		// search state is right aligned.  If there is not enough space
 		// msg_strtrunc() will shorten in the middle.
-		if (msg_scrolled != 0)
+		if (msg_scrolled != 0 || cmd_silent)
 		    // Use all the columns.
 		    len = (int)(Rows - msg_row) * Columns - 1;
 		else
@@ -1406,62 +1408,67 @@ do_search(
 	    if (msgbuf != NULL)
 	    {
 		vim_memset(msgbuf, ' ', len);
-		msgbuf[0] = dirc;
 		msgbuf[len - 1] = NUL;
-
-		if (enc_utf8 && utf_iscomposing(utf_ptr2char(p)))
-		{
-		    // Use a space to draw the composing char on.
-		    msgbuf[1] = ' ';
-		    mch_memmove(msgbuf + 2, p, STRLEN(p));
-		}
-		else
-		    mch_memmove(msgbuf + 1, p, STRLEN(p));
-		if (off_len > 0)
-		    mch_memmove(msgbuf + STRLEN(p) + 1, off_buf, off_len);
-
-		trunc = msg_strtrunc(msgbuf, TRUE);
-		if (trunc != NULL)
+		// do not fill the msgbuf buffer, if cmd_silent is set, leave it
+		// empty for the search_stat feature.
+		if (!cmd_silent)
 		{
-		    vim_free(msgbuf);
-		    msgbuf = trunc;
-		}
-
-#ifdef FEAT_RIGHTLEFT
-		// The search pattern could be shown on the right in rightleft
-		// mode, but the 'ruler' and 'showcmd' area use it too, thus
-		// it would be blanked out again very soon.  Show it on the
-		// left, but do reverse the text.
-		if (curwin->w_p_rl && *curwin->w_p_rlc == 's')
-		{
-		    char_u *r;
-		    size_t pat_len;
-
-		    r = reverse_text(msgbuf);
-		    if (r != NULL)
+		    msgbuf[0] = dirc;
+
+		    if (enc_utf8 && utf_iscomposing(utf_ptr2char(p)))
+		    {
+			// Use a space to draw the composing char on.
+			msgbuf[1] = ' ';
+			mch_memmove(msgbuf + 2, p, STRLEN(p));
+		    }
+		    else
+			mch_memmove(msgbuf + 1, p, STRLEN(p));
+		    if (off_len > 0)
+			mch_memmove(msgbuf + STRLEN(p) + 1, off_buf, off_len);
+
+		    trunc = msg_strtrunc(msgbuf, TRUE);
+		    if (trunc != NULL)
 		    {
 			vim_free(msgbuf);
-			msgbuf = r;
-			// move reversed text to beginning of buffer
-			while (*r != NUL && *r == ' ')
-			    r++;
-			pat_len = msgbuf + STRLEN(msgbuf) - r;
-			mch_memmove(msgbuf, r, pat_len);
-			// overwrite old text
-			if ((size_t)(r - msgbuf) >= pat_len)
-			    vim_memset(r, ' ', pat_len);
-			else
-			    vim_memset(msgbuf + pat_len, ' ', r - msgbuf);
+			msgbuf = trunc;
 		    }
+
+    #ifdef FEAT_RIGHTLEFT
+		    // The search pattern could be shown on the right in rightleft
+		    // mode, but the 'ruler' and 'showcmd' area use it too, thus
+		    // it would be blanked out again very soon.  Show it on the
+		    // left, but do reverse the text.
+		    if (curwin->w_p_rl && *curwin->w_p_rlc == 's')
+		    {
+			char_u *r;
+			size_t pat_len;
+
+			r = reverse_text(msgbuf);
+			if (r != NULL)
+			{
+			    vim_free(msgbuf);
+			    msgbuf = r;
+			    // move reversed text to beginning of buffer
+			    while (*r != NUL && *r == ' ')
+				r++;
+			    pat_len = msgbuf + STRLEN(msgbuf) - r;
+			    mch_memmove(msgbuf, r, pat_len);
+			    // overwrite old text
+			    if ((size_t)(r - msgbuf) >= pat_len)
+				vim_memset(r, ' ', pat_len);
+			    else
+				vim_memset(msgbuf + pat_len, ' ', r - msgbuf);
+			}
+		    }
+    #endif
+		    msg_outtrans(msgbuf);
+		    msg_clr_eos();
+		    msg_check();
+
+		    gotocmdline(FALSE);
+		    out_flush();
+		    msg_nowait = TRUE;	    // don't wait for this message
 		}
-#endif
-		msg_outtrans(msgbuf);
-		msg_clr_eos();
-		msg_check();
-
-		gotocmdline(FALSE);
-		out_flush();
-		msg_nowait = TRUE;	    // don't wait for this message
 	    }
 	}
 
@@ -1569,7 +1576,7 @@ do_search(
 	// Show [1/15] if 'S' is not in 'shortmess'.
 	if ((options & SEARCH_ECHO)
 		&& messaging()
-		&& !(cmd_silent + msg_silent)
+		&& !msg_silent
 		&& c != FAIL
 		&& !shortmess(SHM_SEARCHCOUNT)
 		&& msgbuf != NULL)
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1965,
+/**/
     1964,
 /**/
     1963,