From 68dd520e39eccb1be9366add1e3298318e5010de Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 12 Sep 2023 12:55:54 -0400 Subject: [PATCH] (read-char-from-minibuffer): Allow use of `quoted-insert` (bug#65805) * lisp/subr.el (read-char-from-minibuffer-map): No need to remap `self-insert-command` any more. (read-char-from-minibuffer): Use `post-command-hook` to exit as soon as a char is provided. --- lisp/subr.el | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index 6cedaffa806..3fad9d36b3e 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -993,11 +993,11 @@ SEQ must be a list, vector, or string. The comparison is done with `equal'. Contrary to `delete', this does not use side-effects, and the argument SEQ is not modified." (declare (side-effect-free t)) - (if (nlistp seq) - ;; If SEQ isn't a list, there's no need to copy SEQ because - ;; `delete' will return a new object. - (delete elt seq) - (delete elt (copy-sequence seq)))) + (delete elt (if (nlistp seq) + ;; If SEQ isn't a list, there's no need to copy SEQ because + ;; `delete' will return a new object. + seq + (copy-sequence seq)))) (defun remq (elt list) "Return LIST with all occurrences of ELT removed. @@ -3499,7 +3499,7 @@ If there is a natural number at point, use it as default." (let ((map (make-sparse-keymap))) (set-keymap-parent map minibuffer-local-map) - (define-key map [remap self-insert-command] #'read-char-from-minibuffer-insert-char) + ;; (define-key map [remap self-insert-command] #'read-char-from-minibuffer-insert-char) (define-key map [remap exit-minibuffer] #'read-char-from-minibuffer-insert-other) (define-key map [remap recenter-top-bottom] #'minibuffer-recenter-top-bottom) @@ -3530,7 +3530,7 @@ allowed to type into the minibuffer. When the user types any such key, this command discard all minibuffer input and displays an error message." (interactive) - (when (minibufferp) + (when (minibufferp) ;;FIXME: Why? (delete-minibuffer-contents) (ding) (discard-input) @@ -3578,6 +3578,10 @@ There is no need to explicitly add `help-char' to CHARS; (interactive) (let ((help-form msg)) ; lexically bound msg (help-form-show))))) + ;; FIXME: We use `read-char-from-minibuffer-insert-char' + ;; here only as a kind of alias of `self-insert-command' + ;; to prevent those keys from being remapped to + ;; `read-char-from-minibuffer-insert-other'. (dolist (char chars) (define-key map (vector char) #'read-char-from-minibuffer-insert-char)) @@ -3589,7 +3593,15 @@ There is no need to explicitly add `help-char' to CHARS; read-char-from-minibuffer-map)) ;; Protect this-command when called from pre-command-hook (bug#45029) (this-command this-command) - (result (progn + (result (minibuffer-with-setup-hook + (lambda () + (add-hook 'post-command-hook + (lambda () + ;; FIXME: Should we use `<='? + (if (= (1+ (minibuffer-prompt-end)) + (point-max)) + (exit-minibuffer))) + nil 'local)) ;; Disable text conversion if it is enabled. ;; (bug#65370) (when (fboundp 'set-text-conversion-style) @@ -5754,8 +5766,8 @@ Return nil if there isn't one." (load-elt (and loads (car loads)))) (save-match-data (while (and loads - (or (null (car load-elt)) - (not (string-match file-regexp (car load-elt))))) + (not (and (car load-elt) + (string-match file-regexp (car load-elt))))) (setq loads (cdr loads) load-elt (and loads (car loads))))) load-elt)) @@ -6328,7 +6340,7 @@ command is called from a keyboard macro?" ;; Skip special forms (from non-compiled code). (and frame (null (car frame))) ;; Skip also `interactive-p' (because we don't want to know if - ;; interactive-p was called interactively but if it's caller was). + ;; interactive-p was called interactively but if its caller was). (eq (nth 1 frame) 'interactive-p) ;; Skip package-specific stack-frames. (let ((skip (run-hook-with-args-until-success @@ -6573,7 +6585,6 @@ effectively rounded up." (unless min-time (setq min-time 0.2)) (let ((reporter - ;; Force a call to `message' now (cons (or min-value 0) (vector (if (>= min-time 0.02) (float-time) nil) @@ -6584,6 +6595,7 @@ effectively rounded up." min-time ;; SUFFIX nil)))) + ;; Force a call to `message' now. (progress-reporter-update reporter (or current-value min-value)) reporter)) -- 2.39.5