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


Reply via email to