0
0
mirror of https://github.com/vim/vim.git synced 2025-07-25 10:54:51 -04:00

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)
This commit is contained in:
Bram Moolenaar 2019-09-02 21:44:59 +02:00
parent c36350bca3
commit 359ad1a6f9
2 changed files with 63 additions and 54 deletions

View File

@ -1351,8 +1351,9 @@ do_search(
pat = p; /* put pat after search command */ pat = p; /* put pat after search command */
} }
if ((options & SEARCH_ECHO) && messaging() if ((options & SEARCH_ECHO) && messaging() &&
&& !cmd_silent && msg_silent == 0) !msg_silent &&
(!cmd_silent || !shortmess(SHM_SEARCHCOUNT)))
{ {
char_u *trunc; char_u *trunc;
char_u off_buf[40]; char_u off_buf[40];
@ -1362,7 +1363,8 @@ do_search(
msg_start(); msg_start();
// Get the offset, so we know how long it is. // 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 = off_buf;
*p++ = dirc; *p++ = dirc;
@ -1383,13 +1385,13 @@ do_search(
else else
p = searchstr; p = searchstr;
if (!shortmess(SHM_SEARCHCOUNT)) if (!shortmess(SHM_SEARCHCOUNT) || cmd_silent)
{ {
// Reserve enough space for the search pattern + offset + // Reserve enough space for the search pattern + offset +
// search stat. Use all the space available, so that the // search stat. Use all the space available, so that the
// search state is right aligned. If there is not enough space // search state is right aligned. If there is not enough space
// msg_strtrunc() will shorten in the middle. // msg_strtrunc() will shorten in the middle.
if (msg_scrolled != 0) if (msg_scrolled != 0 || cmd_silent)
// Use all the columns. // Use all the columns.
len = (int)(Rows - msg_row) * Columns - 1; len = (int)(Rows - msg_row) * Columns - 1;
else else
@ -1406,62 +1408,67 @@ do_search(
if (msgbuf != NULL) if (msgbuf != NULL)
{ {
vim_memset(msgbuf, ' ', len); vim_memset(msgbuf, ' ', len);
msgbuf[0] = dirc;
msgbuf[len - 1] = NUL; msgbuf[len - 1] = NUL;
// do not fill the msgbuf buffer, if cmd_silent is set, leave it
if (enc_utf8 && utf_iscomposing(utf_ptr2char(p))) // empty for the search_stat feature.
if (!cmd_silent)
{ {
// Use a space to draw the composing char on. msgbuf[0] = dirc;
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 (enc_utf8 && utf_iscomposing(utf_ptr2char(p)))
if (trunc != NULL) {
{ // Use a space to draw the composing char on.
vim_free(msgbuf); msgbuf[1] = ' ';
msgbuf = trunc; 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);
#ifdef FEAT_RIGHTLEFT trunc = msg_strtrunc(msgbuf, TRUE);
// The search pattern could be shown on the right in rightleft if (trunc != NULL)
// 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); vim_free(msgbuf);
msgbuf = r; msgbuf = trunc;
// 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); #ifdef FEAT_RIGHTLEFT
out_flush(); // The search pattern could be shown on the right in rightleft
msg_nowait = TRUE; // don't wait for this message // 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'. // Show [1/15] if 'S' is not in 'shortmess'.
if ((options & SEARCH_ECHO) if ((options & SEARCH_ECHO)
&& messaging() && messaging()
&& !(cmd_silent + msg_silent) && !msg_silent
&& c != FAIL && c != FAIL
&& !shortmess(SHM_SEARCHCOUNT) && !shortmess(SHM_SEARCHCOUNT)
&& msgbuf != NULL) && msgbuf != NULL)

View File

@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1965,
/**/ /**/
1964, 1964,
/**/ /**/