If a macro is invoked while a keyboard macro is being defined, avoid
having the newly defined macro contain both the key sequence invoking
the macro and the value of the invoked macro.
PS1='$ ' HISTFILE= INPUTRC=<(echo '"A": "B"') \
bash --norc -in <<< $'\cX(A\cX)\n\exprint-last-kbd-macro'
$ B
$
AB
---
lib/readline/kill.c | 2 +-
lib/readline/readline.c | 4 ++--
lib/readline/text.c | 6 +++---
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/readline/kill.c b/lib/readline/kill.c
index ca92ea13..e0c7138d 100644
--- a/lib/readline/kill.c
+++ b/lib/readline/kill.c
@@ -718,7 +718,7 @@ _rl_bracketed_text (size_t *lenp)
RL_SETSTATE (RL_STATE_MOREINPUT);
while ((c = rl_read_key ()) >= 0)
{
- if (RL_ISSTATE (RL_STATE_MACRODEF))
+ if (RL_ISSTATE (RL_STATE_MACRODEF) && RL_ISSTATE (RL_STATE_MACROINPUT)
== 0)
_rl_add_macro_char (c);
if (c == '\r') /* XXX */
diff --git a/lib/readline/readline.c b/lib/readline/readline.c
index 33b6c13a..e976f8f4 100644
--- a/lib/readline/readline.c
+++ b/lib/readline/readline.c
@@ -890,7 +890,7 @@ _rl_dispatch_subseq (register int key, Keymap map, int
got_subseq)
{
if (map[ESC].type == ISKMAP)
{
- if (RL_ISSTATE (RL_STATE_MACRODEF))
+ if (RL_ISSTATE (RL_STATE_MACRODEF) && RL_ISSTATE
(RL_STATE_MACROINPUT) == 0)
_rl_add_macro_char (ESC);
RESIZE_KEYSEQ_BUFFER ();
rl_executing_keyseq[rl_key_sequence_length++] = ESC;
@@ -903,7 +903,7 @@ _rl_dispatch_subseq (register int key, Keymap map, int
got_subseq)
return 0;
}
- if (RL_ISSTATE (RL_STATE_MACRODEF))
+ if (RL_ISSTATE (RL_STATE_MACRODEF) && RL_ISSTATE (RL_STATE_MACROINPUT) == 0)
_rl_add_macro_char (key);
r = 0;
diff --git a/lib/readline/text.c b/lib/readline/text.c
index 11888ebd..e3ae28e1 100644
--- a/lib/readline/text.c
+++ b/lib/readline/text.c
@@ -1047,7 +1047,7 @@ _rl_insert_next (int count)
if (c < 0)
return 1;
- if (RL_ISSTATE (RL_STATE_MACRODEF))
+ if (RL_ISSTATE (RL_STATE_MACRODEF) && RL_ISSTATE (RL_STATE_MACROINPUT) == 0)
_rl_add_macro_char (c);
#if defined (HANDLE_SIGNALS)
@@ -1793,7 +1793,7 @@ _rl_char_search (int count, int fdir, int bdir)
if (mb_len <= 0)
return 1;
- if (RL_ISSTATE (RL_STATE_MACRODEF))
+ if (RL_ISSTATE (RL_STATE_MACRODEF) && RL_ISSTATE (RL_STATE_MACROINPUT) == 0)
for (i = 0; i < mb_len; i++)
_rl_add_macro_char (mbchar[i]);
@@ -1813,7 +1813,7 @@ _rl_char_search (int count, int fdir, int bdir)
if (c < 0)
return 1;
- if (RL_ISSTATE (RL_STATE_MACRODEF))
+ if (RL_ISSTATE (RL_STATE_MACRODEF) && RL_ISSTATE (RL_STATE_MACROINPUT) == 0)
_rl_add_macro_char (c);
if (count < 0)
--
2.50.1