Monday, September 2, 2019

Re: Mapping erases search count message

diff --git a/src/search.c b/src/search.c
index 46273e11e..21458fae3 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1354,8 +1354,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];
@@ -1365,7 +1366,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;
@@ -1386,13 +1388,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
@@ -1409,62 +1411,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;
}
+
+ #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
}
}

@@ -1572,7 +1579,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)
On Fr, 30 Aug 2019, Bram Moolenaar wrote:

> Thanks. Yes, I think we should do this. But the allocation should
> probably be done differently, it looks like with cmd_silent set it still
> computes the size of the command. This will require some more "if"
> statements, but makes the size computation more accurate.

Well, yeah I thought this wouldn't hurt.

So how about the attached patch then? It will simply use all available
space in the command line. Not sure this is correct however.

Best,
Christian
--
Wie man sein Kind nicht nennen sollte:
Carmen Bert

--
--
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/20190902074836.GM25942%40256bit.org.

No comments: