diff options
author | Eli Zaretskii <eliz@gnu.org> | 2018-07-21 12:10:20 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2018-07-21 12:10:20 +0300 |
commit | 03e3440dbbfea40b449a9f6f23a3630664275d11 (patch) | |
tree | 37ab03786de0ca04d0a8bfc7a74546f68a2c61fd /src/keyboard.c | |
parent | 1780502da6b9ac8d3063dfd56f675318568283dc (diff) | |
download | emacs-03e3440dbbfea40b449a9f6f23a3630664275d11.tar.gz |
Fix recording keyboard macros when input method is active
* lisp/international/quail.el (quail-start-translation)
(quail-start-conversion): Bind inhibit--record-char to t for
the first character of a translated sequence.
* src/keyboard.c (record_char): Don't record events from
macros to dribble file, per documentation.
(Fopen_dribble_file): Doc fix.
(syms_of_keyboard) <inhibit--record-char>: New variable.
(record_char): Don't record input event if
inhibit--record-char is non-nil. (Bug#32108)
Diffstat (limited to 'src/keyboard.c')
-rw-r--r-- | src/keyboard.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index aa58e268435..01d7ce9d5e0 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -3150,6 +3150,10 @@ help_char_p (Lisp_Object c) static void record_char (Lisp_Object c) { + /* quail.el binds this to avoid recording keys twice. */ + if (inhibit_record_char) + return; + int recorded = 0; if (CONSP (c) && (EQ (XCAR (c), Qhelp_echo) || EQ (XCAR (c), Qmouse_movement))) @@ -3256,7 +3260,7 @@ record_char (Lisp_Object c) /* Write c to the dribble file. If c is a lispy event, write the event's symbol to the dribble file, in <brackets>. Bleaugh. If you, dear reader, have a better idea, you've got the source. :-) */ - if (dribble) + if (dribble && NILP (Vexecuting_kbd_macro)) { block_input (); if (INTEGERP (c)) @@ -10110,10 +10114,13 @@ DEFUN ("recursion-depth", Frecursion_depth, Srecursion_depth, 0, 0, 0, DEFUN ("open-dribble-file", Fopen_dribble_file, Sopen_dribble_file, 1, 1, "FOpen dribble file: ", - doc: /* Start writing all keyboard characters to a dribble file called FILE. + doc: /* Start writing input events to a dribble file called FILE. If FILE is nil, close any open dribble file. The file will be closed when Emacs exits. +The events written to the file include keyboard and mouse input +events, but not events from executing keyboard macros. + Be aware that this records ALL characters you type! This may include sensitive information such as passwords. */) (Lisp_Object file) @@ -11848,6 +11855,14 @@ signals. */); Vwhile_no_input_ignore_events, doc: /* Ignored events from while-no-input. */); Vwhile_no_input_ignore_events = Qnil; + + DEFVAR_BOOL ("inhibit--record-char", + inhibit_record_char, + doc: /* If non-nil, don't record input events. +This inhibits recording input events for the purposes of keyboard +macros, dribble file, and `recent-keys'. +Internal use only. */); + inhibit_record_char = false; } void |