From: Juri Linkov Date: Sun, 6 Dec 2020 21:07:36 +0000 (+0200) Subject: Handle calling read-char-from-minibuffer and y-or-n-p from pre-command-hook X-Git-Tag: emacs-28.0.90~4898 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=5204c7420b2e4dd2080c33796c987d67e44f5597;p=emacs.git Handle calling read-char-from-minibuffer and y-or-n-p from pre-command-hook * lisp/subr.el (read-char-from-minibuffer-insert-char) (read-char-from-minibuffer-insert-other, y-or-n-p-insert-y) (y-or-n-p-insert-n, y-or-n-p-insert-other): Check for 'minibufferp' before executing the body. (read-char-from-minibuffer, y-or-n-p): Let-bind this-command before calling read-from-minibuffer. (Bug#45029) --- diff --git a/lisp/subr.el b/lisp/subr.el index cf41f77f2dc..2236e934841 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2745,20 +2745,22 @@ floating point support." "Insert the character you type in the minibuffer and exit. Discard all previous input before inserting and exiting the minibuffer." (interactive) - (delete-minibuffer-contents) - (insert last-command-event) - (exit-minibuffer)) + (when (minibufferp) + (delete-minibuffer-contents) + (insert last-command-event) + (exit-minibuffer))) (defun read-char-from-minibuffer-insert-other () "Handle inserting of a character other than allowed. Display an error on trying to insert a disallowed character. Also discard all previous input in the minibuffer." (interactive) - (delete-minibuffer-contents) - (ding) - (discard-input) - (minibuffer-message "Wrong answer") - (sit-for 2)) + (when (minibufferp) + (delete-minibuffer-contents) + (ding) + (discard-input) + (minibuffer-message "Wrong answer") + (sit-for 2))) (defvar empty-history) @@ -2802,6 +2804,8 @@ There is no need to explicitly add `help-char' to CHARS; map read-char-from-minibuffer-map-hash) map)) read-char-from-minibuffer-map)) + ;; Protect this-command when called from pre-command-hook (bug#45029) + (this-command this-command) (result (read-from-minibuffer prompt nil map nil (or history 'empty-history))) @@ -2856,28 +2860,31 @@ There is no need to explicitly add `help-char' to CHARS; "Insert the answer \"y\" and exit the minibuffer of `y-or-n-p'. Discard all previous input before inserting and exiting the minibuffer." (interactive) - (delete-minibuffer-contents) - (insert "y") - (exit-minibuffer)) + (when (minibufferp) + (delete-minibuffer-contents) + (insert "y") + (exit-minibuffer))) (defun y-or-n-p-insert-n () "Insert the answer \"n\" and exit the minibuffer of `y-or-n-p'. Discard all previous input before inserting and exiting the minibuffer." (interactive) - (delete-minibuffer-contents) - (insert "n") - (exit-minibuffer)) + (when (minibufferp) + (delete-minibuffer-contents) + (insert "n") + (exit-minibuffer))) (defun y-or-n-p-insert-other () "Handle inserting of other answers in the minibuffer of `y-or-n-p'. Display an error on trying to insert a disallowed character. Also discard all previous input in the minibuffer." (interactive) - (delete-minibuffer-contents) - (ding) - (discard-input) - (minibuffer-message "Please answer y or n") - (sit-for 2)) + (when (minibufferp) + (delete-minibuffer-contents) + (ding) + (discard-input) + (minibuffer-message "Please answer y or n") + (sit-for 2))) (defvar empty-history) @@ -2955,6 +2962,8 @@ is nil and `use-dialog-box' is non-nil." (let ((help-form msg)) ; lexically bound msg (help-form-show))))) map)) + ;; Protect this-command when called from pre-command-hook (bug#45029) + (this-command this-command) (str (read-from-minibuffer prompt nil keymap nil (or y-or-n-p-history-variable 'empty-history))))