summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-09-02 21:44:59 +0200
committerBram Moolenaar <Bram@vim.org>2019-09-02 21:44:59 +0200
commit359ad1a6f92d0d3b4b942ea003fb02dc57bbfc9e (patch)
tree0f819069945a9d0d79718f73e42e1f341090ddd0
parentc36350bca3eed8ef97061e28c38b5b89cae1f13e (diff)
patch 8.1.1965: search count message is not displayed when using a mappingv8.1.1965
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)
-rw-r--r--src/search.c115
-rw-r--r--src/version.c2
2 files changed, 63 insertions, 54 deletions
diff --git a/src/search.c b/src/search.c
index 9eb192550f..758c4ef1aa 100644
--- 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;
- }
+ msgbuf[0] = dirc;
-#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;
+ 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);
- r = reverse_text(msgbuf);
- if (r != NULL)
+ 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;
}
- }
-#endif
- msg_outtrans(msgbuf);
- msg_clr_eos();
- msg_check();
- gotocmdline(FALSE);
- out_flush();
- msg_nowait = TRUE; // don't wait for this message
+ #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
+ }
}
}
@@ -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)
diff --git a/src/version.c b/src/version.c
index c159705f3e..af01f26abc 100644
--- 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,