From: Ihor Radchenko <yantar92@posteo.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: materus213@gmail.com, 67393@debbugs.gnu.org,
stefankangas@gmail.com, juri@linkov.net
Subject: bug#67393: 29.1; Slow to open file if autosave exists
Date: Mon, 25 Dec 2023 16:50:33 +0000 [thread overview]
Message-ID: <87zfxymdk6.fsf@localhost> (raw)
In-Reply-To: <83a5pzbbg7.fsf@gnu.org>
Eli Zaretskii <eliz@gnu.org> writes:
>> Then, the "important" messages should be written in such a way that they
>> can be understood later, away from the immediate context of the message
>> trigger.
>
> I don't think I understand what this means in practice. Can you show
> what will be displayed in the mini-window in this case, and how to
> make the "important" message stand out?
For example, the message "File exists, but cannot be read" from
`after-find-file' may be written as
"Opening file: <filename> exists, but cannot be read"
>> > How is this better than waiting for a second?
>>
>> 1. Waiting for a second creates a temptation to press C-g without
>> thinking and get the original message replaced with "Quit".
>>
>> 2. The message can be read later (not just within one second). For
>> example after a distraction in RL and being away from Emacs or a
>> short moment.
>
> Again: how will this look in practice, including the dismissal action?
Try the following proof-of-concept code:
(defvar important-message-list nil)
(defun set-important-message (message)
"Return the last message and previous important messages as one string.
Individual messages will be separated by a newline and the last message will be
separated by \"--\".
The previous messages will be displayed no longer than 'message-timeout property
seconds (if 0 - forever). The previous messages may be dismissed via
`remove-previous-message' command.
Note that this feature works best only when `resize-mini-windows'
is at its default value `grow-only'."
(catch :continue
(let ((last-message (car important-message-list))
(tail (cdr important-message-list)))
(while last-message
(let ((timeout (aref last-message 2)))
(cond
((= timeout 0) (throw :continue t))
((> (float-time) (+ (aref last-message 0) timeout))
(setq important-message-list (delete last-message important-message-list)))))
(setq last-message (car tail)
tail (cdr tail)))))
(prog1
(if important-message-list
(format "%s\n%s\n%s"
(mapconcat (lambda (m) (aref m 1))
(reverse important-message-list)
"\n")
(make-string (frame-width) ?─)
message)
message)
(when (get-text-property 0 'message-timeout message)
(push (vector (float-time)
(substring-no-properties (copy-sequence message))
(get-text-property 0 'message-timeout message))
important-message-list))))
(defun remove-previous-message (&optional n)
"Remove the oldest important message displayed.
With numeric prefix argument N, remove N's message."
(interactive "p")
(unless important-message-list (user-error "No important messages are displayed."))
(let ((target (nth (or (and n (1+ n)) 0))))
(setq important-message-list (delete target important-message-list))))
(setq set-message-function #'set-important-message)
(message (propertize "This is a test!" 'message-timeout 0))
(message (propertize "This will disappear in 3 seconds" 'message-timeout 3))
(message "foo")
;; M-x remove-previous-message to remove the displayed message.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
next prev parent reply other threads:[~2023-12-25 16:50 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-23 0:28 bug#67393: 29.1; Slow to open file if autosave exists materus213
2023-11-23 6:51 ` Eli Zaretskii
2023-12-22 14:56 ` Stefan Kangas
2023-12-23 14:34 ` Ihor Radchenko
2023-12-23 17:23 ` Juri Linkov
2023-12-23 18:05 ` Ihor Radchenko
2023-12-24 17:34 ` Juri Linkov
2023-12-24 18:39 ` Eli Zaretskii
2023-12-24 19:03 ` Ihor Radchenko
2023-12-24 19:28 ` Eli Zaretskii
2023-12-24 19:49 ` Ihor Radchenko
2023-12-24 20:19 ` Eli Zaretskii
2023-12-25 16:50 ` Ihor Radchenko [this message]
2023-12-25 16:58 ` Eli Zaretskii
2023-12-25 17:18 ` Ihor Radchenko
2023-12-25 17:34 ` Eli Zaretskii
2023-12-25 18:40 ` Ihor Radchenko
2023-12-25 19:08 ` Eli Zaretskii
2023-12-25 20:17 ` Ihor Radchenko
2023-12-27 12:34 ` Eli Zaretskii
2023-12-28 13:59 ` Ihor Radchenko
2023-12-27 17:20 ` Juri Linkov
2023-12-27 17:33 ` Eli Zaretskii
2023-12-28 7:57 ` Juri Linkov
2024-01-16 16:36 ` Juri Linkov
2024-01-16 17:10 ` Eli Zaretskii
2024-01-16 17:43 ` Juri Linkov
2024-01-16 18:51 ` Eli Zaretskii
2024-01-17 16:48 ` Juri Linkov
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zfxymdk6.fsf@localhost \
--to=yantar92@posteo.net \
--cc=67393@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=juri@linkov.net \
--cc=materus213@gmail.com \
--cc=stefankangas@gmail.com \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).