emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 9ad3560: * src/keyboard.c (record_char, read_key_se


From: Stefan Monnier
Subject: [Emacs-diffs] master 9ad3560: * src/keyboard.c (record_char, read_key_sequence): Copy raw events
Date: Thu, 29 Mar 2018 09:11:27 -0400 (EDT)

branch: master
commit 9ad3560db6b67777bc8f9b370e053b6a19a7501f
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * src/keyboard.c (record_char, read_key_sequence): Copy raw events
---
 src/keyboard.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/keyboard.c b/src/keyboard.c
index 044e3fa..c0c863f 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3258,7 +3258,10 @@ record_char (Lisp_Object c)
       if (!recorded)
        {
          total_keys += total_keys < NUM_RECENT_KEYS;
-         ASET (recent_keys, recent_keys_index, c);
+         ASET (recent_keys, recent_keys_index,
+                /* Copy the event, in case it gets modified by side-effect
+                   by some remapping function (bug#30955).  */
+                CONSP (c) ? Fcopy_sequence (c) : c);
          if (++recent_keys_index >= NUM_RECENT_KEYS)
            recent_keys_index = 0;
        }
@@ -9296,7 +9299,10 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, 
Lisp_Object prompt,
            }
 
          GROW_RAW_KEYBUF;
-         ASET (raw_keybuf, raw_keybuf_count, key);
+         ASET (raw_keybuf, raw_keybuf_count,
+                /* Copy the event, in case it gets modified by side-effect
+                   by some remapping function (bug#30955).  */
+                CONSP (key) ? Fcopy_sequence (key) : key);
          raw_keybuf_count++;
        }
 
@@ -9343,9 +9349,6 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, 
Lisp_Object prompt,
                      && BUFFERP (XWINDOW (window)->contents)
                      && XBUFFER (XWINDOW (window)->contents) != current_buffer)
                    {
-                     GROW_RAW_KEYBUF;
-                     ASET (raw_keybuf, raw_keybuf_count, key);
-                     raw_keybuf_count++;
                      keybuf[t] = key;
                      mock_input = t + 1;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]