From: Juri Linkov <juri@linkov.net>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: Michael Heerdegen <michael_heerdegen@web.de>,
17272@debbugs.gnu.org, 19064@debbugs.gnu.org
Subject: bug#17272: bug#19064: bug#17272: bug#19064: 25.0.50; `message' overwrites `y-or-n-p' prompt, so user misses it
Date: Mon, 18 Nov 2019 23:10:30 +0200 [thread overview]
Message-ID: <87r224x54p.fsf@mail.linkov.net> (raw)
In-Reply-To: <87bltaw3xz.fsf@mail.linkov.net> (Juri Linkov's message of "Sun, 17 Nov 2019 23:59:50 +0200")
[-- Attachment #1: Type: text/plain, Size: 793 bytes --]
>>> But before I had a chance to answer the prompt, compilation finished
>>> and obscured the prompt with this message permanently:
>>>
>>> Compilation finished
>>>
>>> So I forgot about what was in the prompt :-(
>>
>> Yeah, it's a problem all over the place.
>>
>>> Since Drew doesn't want to improve safety to cover all such cases,
>>> we need to address these issues one by one, so here is the next patch:
>>
>> Drew doesn't have veto powers. I say go ahead and make the change in
>> `message' (with a variable that can be used to force `message' to not
>> behave like `minibuffer-message').
>
> Yes, I believe a new variable would make Drew happy.
The variable name is ‘message-in-echo-area’. After a little testing,
it seems to handle all such cases well:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: message-in-echo-area.patch --]
[-- Type: text/x-diff, Size: 3725 bytes --]
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 6e72eb73f9..7e74fa1ffb 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -712,16 +712,16 @@ minibuffer-message
(progn
(if args
(apply #'message message args)
- (message "%s" message))
+ (message-in-echo-area "%s" message))
(prog1 (sit-for (or minibuffer-message-timeout 1000000))
- (message nil)))
+ (message-in-echo-area nil)))
;; Record message in the *Messages* buffer
(let ((inhibit-message t))
(if args
(apply #'message message args)
- (message "%s" message)))
+ (message-in-echo-area "%s" message)))
;; Clear out any old echo-area message to make way for our new thing.
- (message nil)
+ (message-in-echo-area nil)
(setq message (if (and (null args)
(string-match-p "\\` *\\[.+\\]\\'" message))
;; Make sure we can put-text-property.
diff --git a/src/editfns.c b/src/editfns.c
index 8fc866d391..a1e3fb1fa5 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2877,6 +2877,49 @@ Fmessage
usage: (message FORMAT-STRING &rest ARGS) */)
(ptrdiff_t nargs, Lisp_Object *args)
+{
+ if (NILP (Vmessage_in_echo_area)
+ && !(NILP (args[0]) || (STRINGP (args[0]) && SBYTES (args[0]) == 0))
+ && WINDOW_LIVE_P (Fold_selected_window ())
+ && BUFFERP (Fwindow_buffer (Fold_selected_window ()))
+ && !NILP (Fminibufferp (Fwindow_buffer (Fold_selected_window ()))))
+ {
+ ptrdiff_t count = SPECPDL_INDEX ();
+
+ /* Avoid possible recursion. */
+ specbind (Qmessage_in_echo_area, Qt);
+
+ record_unwind_current_buffer ();
+ Fset_buffer (Fwindow_buffer (Fold_selected_window ()));
+
+ return unbind_to (count, CALLN (Fapply, intern ("minibuffer-message"),
+ Flist (nargs, args)));
+ }
+ else
+ return Fmessage_in_echo_area (nargs, args);
+}
+
+DEFUN ("message-in-echo-area", Fmessage_in_echo_area, Smessage_in_echo_area, 1, MANY, 0,
+ doc: /* Display a message at the bottom of the screen.
+The message also goes into the `*Messages*' buffer, if `message-log-max'
+is non-nil. (In keyboard macros, that's all it does.)
+Return the message.
+
+In batch mode, the message is printed to the standard error stream,
+followed by a newline.
+
+The first argument is a format control string, and the rest are data
+to be formatted under control of the string. Percent sign (%), grave
+accent (\\=`) and apostrophe (\\=') are special in the format; see
+`format-message' for details. To display STRING without special
+treatment, use (message-in-echo-area "%s" STRING).
+
+If the first argument is nil or the empty string, the function clears
+any existing message; this lets the minibuffer contents show. See
+also `current-message'.
+
+usage: (message-in-echo-area FORMAT-STRING &rest ARGS) */)
+ (ptrdiff_t nargs, Lisp_Object *args)
{
if (NILP (args[0])
|| (STRINGP (args[0])
@@ -4520,6 +4563,11 @@ syms_of_editfns (void)
it to be non-nil. */);
binary_as_unsigned = false;
+ DEFVAR_LISP ("message-in-echo-area", Vmessage_in_echo_area,
+ doc: /* Non-nil means overwrite the minibuffer with a message in the echo area. */);
+ Vmessage_in_echo_area = Qnil;
+ DEFSYM (Qmessage_in_echo_area, "message-in-echo-area");
+
defsubr (&Spropertize);
defsubr (&Schar_equal);
defsubr (&Sgoto_char);
@@ -4594,6 +4642,7 @@ syms_of_editfns (void)
defsubr (&Semacs_pid);
defsubr (&Ssystem_name);
defsubr (&Smessage);
+ defsubr (&Smessage_in_echo_area);
defsubr (&Smessage_box);
defsubr (&Smessage_or_box);
defsubr (&Scurrent_message);
next prev parent reply other threads:[~2019-11-18 21:10 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-15 18:38 bug#19064: 25.0.50; `message' overwrites `y-or-n-p' prompt, so user misses it Drew Adams
2015-12-26 16:30 ` Lars Ingebrigtsen
2015-12-26 17:19 ` Drew Adams
2015-12-26 17:45 ` Michael Heerdegen
2015-12-26 17:57 ` Lars Ingebrigtsen
2019-10-07 17:41 ` bug#17272: " Lars Ingebrigtsen
2019-10-08 9:15 ` Michael Heerdegen
2019-10-08 15:44 ` bug#17272: " Lars Ingebrigtsen
2019-11-05 23:10 ` bug#19064: " Juri Linkov
2019-11-08 20:58 ` Lars Ingebrigtsen
2019-11-08 21:19 ` bug#19064: " Drew Adams
2019-11-09 23:01 ` Juri Linkov
2019-11-12 2:13 ` bug#17272: " Lars Ingebrigtsen
2019-11-12 15:34 ` Drew Adams
2019-11-12 22:20 ` Juri Linkov
2019-11-12 23:23 ` bug#17272: " Drew Adams
2019-11-13 21:29 ` Michael Heerdegen
2019-11-13 21:53 ` Juri Linkov
2019-11-13 23:24 ` bug#17272: " Drew Adams
2019-11-14 15:46 ` Michael Heerdegen
2019-11-14 16:28 ` bug#17272: " Drew Adams
2019-11-14 17:06 ` Michael Heerdegen
2019-11-14 17:17 ` Drew Adams
2019-11-14 20:29 ` Michael Heerdegen
2019-11-16 20:53 ` Juri Linkov
2019-11-16 22:37 ` Michael Heerdegen
2019-11-17 1:42 ` bug#19064: bug#17272: " Drew Adams
2019-11-17 21:58 ` Juri Linkov
2019-11-17 23:54 ` bug#19064: " Drew Adams
2019-11-17 5:52 ` Lars Ingebrigtsen
2019-11-17 5:52 ` Lars Ingebrigtsen
2019-11-17 21:59 ` bug#17272: " Juri Linkov
2019-11-18 21:10 ` Juri Linkov [this message]
2019-11-19 8:13 ` Lars Ingebrigtsen
2019-11-19 11:11 ` bug#19064: " João Távora
2019-11-19 22:39 ` bug#17272: " Juri Linkov
2019-11-19 23:38 ` João Távora
2019-11-20 22:10 ` Juri Linkov
2019-11-20 23:44 ` João Távora
2019-11-21 21:39 ` Juri Linkov
2019-11-22 7:48 ` Eli Zaretskii
2019-11-23 19:02 ` Juri Linkov
2019-11-23 19:14 ` Eli Zaretskii
2019-11-26 23:18 ` bug#19064: " Juri Linkov
2019-11-27 0:46 ` Drew Adams
2019-11-21 8:22 ` martin rudalics
2019-11-21 21:44 ` Juri Linkov
2019-11-22 8:08 ` martin rudalics
2019-11-23 18:56 ` Juri Linkov
2019-11-23 19:16 ` Eli Zaretskii
2019-11-19 22:28 ` Juri Linkov
2019-11-20 10:55 ` Lars Ingebrigtsen
2019-11-20 22:18 ` Juri Linkov
2019-11-21 21:54 ` Juri Linkov
2019-11-21 23:07 ` bug#19064: " Lars Ingebrigtsen
2019-11-23 21:54 ` Juri Linkov
2019-11-26 23:44 ` Juri Linkov
2019-11-27 11:55 ` bug#19064: " Lars Ingebrigtsen
2019-11-28 22:45 ` Juri Linkov
2019-11-06 22:18 ` Juri Linkov
2019-11-09 22:57 ` Juri Linkov
2019-11-10 9:46 ` martin rudalics
2019-11-10 20:45 ` bug#38164: quit-restore-window doesn't restore point in man Juri Linkov
2019-11-11 9:33 ` martin rudalics
2019-11-12 20:50 ` Juri Linkov
2019-11-13 8:04 ` martin rudalics
2019-11-13 21:29 ` Juri Linkov
2019-11-14 9:20 ` martin rudalics
2019-11-14 23:13 ` Juri Linkov
2019-11-15 8:13 ` martin rudalics
2019-11-18 21:21 ` Juri Linkov
2019-11-19 3:28 ` Eli Zaretskii
2019-11-19 7:56 ` martin rudalics
2019-11-19 16:06 ` Eli Zaretskii
2019-11-19 16:53 ` martin rudalics
2019-11-19 17:36 ` Eli Zaretskii
2019-11-19 18:15 ` martin rudalics
2019-11-19 23:03 ` Juri Linkov
2019-11-20 7:59 ` martin rudalics
2019-11-20 22:35 ` Juri Linkov
2019-11-20 16:02 ` Eli Zaretskii
2020-09-21 13:08 ` Lars Ingebrigtsen
2021-04-04 18:13 ` Basil L. Contovounesios
2021-04-04 18:28 ` Eli Zaretskii
2021-04-04 19:19 ` Lars Ingebrigtsen
2021-04-04 19:36 ` Eli Zaretskii
2021-04-04 19:40 ` Lars Ingebrigtsen
2021-04-04 19:38 ` Lars Ingebrigtsen
2015-12-26 17:53 ` bug#19064: 25.0.50; `message' overwrites `y-or-n-p' prompt, so user misses it Lars Ingebrigtsen
2015-12-26 18:10 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87r224x54p.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=17272@debbugs.gnu.org \
--cc=19064@debbugs.gnu.org \
--cc=larsi@gnus.org \
--cc=michael_heerdegen@web.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.