If a control character is used in the isearch search string (using ^V or
bracketed paste), it will be printed in the message area, so make it
visible to make the prompt display correctly.
---
lib/readline/isearch.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/lib/readline/isearch.c b/lib/readline/isearch.c
index 6cb1879d..ec4ea276 100644
--- a/lib/readline/isearch.c
+++ b/lib/readline/isearch.c
@@ -156,7 +156,7 @@ rl_display_search (char *search_string, int flags, int
where)
searchlen = (search_string && *search_string) ? strlen (search_string) : 0;
- message = (char *)xmalloc (searchlen + 64);
+ message = (char *)xmalloc (searchlen * 2 + 64);
msglen = 0;
#if defined (NOTDEF)
@@ -185,10 +185,15 @@ rl_display_search (char *search_string, int flags, int
where)
msglen += 10;
if (search_string && *search_string)
- {
- strcpy (message + msglen, search_string);
- msglen += searchlen;
- }
+ for (char c; c = *search_string; search_string++)
+ {
+ if (CTRL_CHAR (c) || c == RUBOUT)
+ {
+ message[msglen++] = '^';
+ c = CTRL_CHAR (c) ? UNCTRL (c) : '?';
+ }
+ message[msglen++] = c;
+ }
else
_rl_optimize_redisplay ();
--
2.50.1