Thursday, August 29, 2019

Re: Mapping erases search count message

From 6e56a15734d34a449235145265d5bff26466db93 Mon Sep 17 00:00:00 2001
From: Christian Brabandt <cb@256bit.org>
Date: Fri, 30 Aug 2019 08:17:07 +0200
Subject: [PATCH] Show the search_index feature also for silent mappings

---
src/search.c | 106 ++++++++++++++++++++++++++-------------------------
1 file changed, 55 insertions(+), 51 deletions(-)

diff --git a/src/search.c b/src/search.c
index 46273e11e..568b27ecc 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1354,8 +1354,7 @@ 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)
{
char_u *trunc;
char_u off_buf[40];
@@ -1409,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
+ }
}
}

@@ -1572,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)
--
2.20.1

On Do, 29 Aug 2019, Bram Moolenaar wrote:

> The <silent> argument means that the command won't be echoed. But it
> does not suppress the output of the command like the ":silent" modifier
> does.

Yeah, but it felt natural to me, to only show the search index feature,
if the command is echoed. I actually played with a simple patch
yesterday, but then thought that <silent> works as expected.

> How about removing the check for cmd_silent in search.c, where
> search_stat() is called?

It's a bit more convoluted, since msgbuf needs to be properly allocated
and initialized.

The attached patch does it. Let me know if you think that is okay. I can
write a test then.

Mit freundlichen Grüßen
Christian
--
Fragt der Arzt:
"Rauchen Sie?"
"Nein."
"Trinken Sie?"
"Nein."
Darauf der Arzt:
"Grinsen Sie nicht so blöd, ich find schon noch was!"

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/20190830061958.GJ25942%40256bit.org.

No comments: