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)
This commit is contained in:
parent
1780502da6
commit
03e3440dbb
2 changed files with 33 additions and 6 deletions
|
@ -1394,12 +1394,13 @@ Return the input string."
|
|||
(generated-events nil) ;FIXME: What is this?
|
||||
(input-method-function nil)
|
||||
(modified-p (buffer-modified-p))
|
||||
last-command-event last-command this-command)
|
||||
last-command-event last-command this-command inhibit-record)
|
||||
(setq quail-current-key ""
|
||||
quail-current-str ""
|
||||
quail-translating t)
|
||||
(if key
|
||||
(setq unread-command-events (cons key unread-command-events)))
|
||||
(setq unread-command-events (cons key unread-command-events)
|
||||
inhibit-record t))
|
||||
(while quail-translating
|
||||
(set-buffer-modified-p modified-p)
|
||||
(quail-show-guidance)
|
||||
|
@ -1408,8 +1409,13 @@ Return the input string."
|
|||
(or input-method-previous-message "")
|
||||
quail-current-str
|
||||
quail-guidance-str)))
|
||||
;; We inhibit record_char only for the first key,
|
||||
;; because it was already recorded before read_char
|
||||
;; called quail-input-method.
|
||||
(inhibit--record-char inhibit-record)
|
||||
(keyseq (read-key-sequence prompt nil nil t))
|
||||
(cmd (lookup-key (quail-translation-keymap) keyseq)))
|
||||
(setq inhibit-record nil)
|
||||
(if (if key
|
||||
(and (commandp cmd) (not (eq cmd 'quail-other-command)))
|
||||
(eq cmd 'quail-self-insert-command))
|
||||
|
@ -1453,14 +1459,15 @@ Return the input string."
|
|||
(generated-events nil) ;FIXME: What is this?
|
||||
(input-method-function nil)
|
||||
(modified-p (buffer-modified-p))
|
||||
last-command-event last-command this-command)
|
||||
last-command-event last-command this-command inhibit-record)
|
||||
(setq quail-current-key ""
|
||||
quail-current-str ""
|
||||
quail-translating t
|
||||
quail-converting t
|
||||
quail-conversion-str "")
|
||||
(if key
|
||||
(setq unread-command-events (cons key unread-command-events)))
|
||||
(setq unread-command-events (cons key unread-command-events)
|
||||
inhibit-record t))
|
||||
(while quail-converting
|
||||
(set-buffer-modified-p modified-p)
|
||||
(or quail-translating
|
||||
|
@ -1476,8 +1483,13 @@ Return the input string."
|
|||
quail-conversion-str
|
||||
quail-current-str
|
||||
quail-guidance-str)))
|
||||
;; We inhibit record_char only for the first key,
|
||||
;; because it was already recorded before read_char
|
||||
;; called quail-input-method.
|
||||
(inhibit--record-char inhibit-record)
|
||||
(keyseq (read-key-sequence prompt nil nil t))
|
||||
(cmd (lookup-key (quail-conversion-keymap) keyseq)))
|
||||
(setq inhibit-record nil)
|
||||
(if (if key (commandp cmd) (eq cmd 'quail-self-insert-command))
|
||||
(progn
|
||||
(setq last-command-event (aref keyseq (1- (length keyseq)))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue