unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
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>





  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).