Subject: Re: 25.0.91; Minibuffer quirk in C-x r SPC

From: Stefan Monnier <[email-masked]>
Date: Sat, 20 Feb 2016 15:32:33 -0500

> Stefan should be able to comment more on why that changes the behavior of
> the prompt staying vs disappearing.

Good question.  `read-key' uses `read-key-sequence' internally, and this
function has always left the prompt on display.

Maybe read-key should be changed to behave more like read-event (and
read-char), since it's typically used in the same kinds of situations.

IOW, we should probably install one of the two patches below.

        Stefan

diff --git a/lisp/subr.el b/lisp/subr.el
index 7478595..cd1b945 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -2116,6 +2116,10 @@ some sort of escape sequence, the ambiguity is resolved via `read-key-delay'."
                 (aref keys 1)
               key)))
       (cancel-timer timer)
+      ;; For some reason, `read-key(-sequence)' leaves the prompt in the echo
+      ;; area, whereas `read-event' seems to empty it just before returning
+      ;; (bug#22714).  So, let's mimick the behavior of `read-event'.
+      (message nil)
       (use-global-map old-global-map))))
 
 (defun read-char (&optional prompt) ;; (inherit-input-method seconds)

diff --git a/lisp/register.el b/lisp/register.el
index faed49a..5fab2b0 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -164,6 +164,13 @@ display such a window regardless."
 		       help-chars)
 	    (unless (get-buffer-window buffer)
 	      (register-preview buffer 'show-empty)))
+          ;; FIXME: For some reason, `read-key(-sequence)' leaves the prompt in
+          ;; the echo area, contrary to `read-event' which seems to empty it
+          ;; just before returning (bug#22714).
+          ;; Not sure what's the best fix: maybe read-key should be changed to
+          ;; behave like read-event.  But in the mean time, the hack below
+          ;; should work.
+          (message nil)
 	  (if (characterp last-input-event) last-input-event
 	    (error "Non-character input-event")))
       (and (timerp timer) (cancel-timer timer))