From: Juri Linkov <juri@linkov.net>
To: Stephen Berman <stephen.berman@gmx.net>
Cc: 38457@debbugs.gnu.org
Subject: bug#38457: 27.0.50; dabbrev-expand regression due to message change
Date: Tue, 03 Dec 2019 01:00:40 +0200 [thread overview]
Message-ID: <8736e2coyv.fsf@mail.linkov.net> (raw)
In-Reply-To: <8736e3vve8.fsf@gmx.net> (Stephen Berman's message of "Mon, 02 Dec 2019 12:06:55 +0100")
[-- Attachment #1: Type: text/plain, Size: 553 bytes --]
> 0. emacs -Q
> 1. M-! te M-/
>
> => It takes about 4 seconds on my machine for the expansion "text" to
> appear, during which the minibuffer displays "[Scanning for
> dabbrevs...100%]" and then "[Scanning for dabbrevs...done]". On builds
> without this regression, the expansion is virtually instantaneous and no
> message is seen in the minibuffer.
This is because of the current limitation of minibuffer-message.
It uses sit-for to wait for 2 seconds per every message.
This should be fixed by using the timer, so there will be no delays
anymore:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: minibuffer-message-timer.patch --]
[-- Type: text/x-diff, Size: 2894 bytes --]
diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index a7bdde478f..3febdeb174 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -702,6 +702,9 @@ minibuffer
(defvar minibuffer-message-properties nil
"Text properties added to the text shown by `minibuffer-message'.")
+(defvar minibuffer-message-timer nil)
+(defvar minibuffer-message-overlay nil)
+
(defun minibuffer-message (message &rest args)
"Temporarily display MESSAGE at the end of the minibuffer.
The text is displayed for `minibuffer-message-timeout' seconds,
@@ -732,24 +735,23 @@ minibuffer-message
;; Don't overwrite the face properties the caller has set
(text-properties-at 0 message))
(setq message (apply #'propertize message minibuffer-message-properties)))
- (let ((ol (make-overlay (point-max) (point-max) nil t t))
- ;; A quit during sit-for normally only interrupts the sit-for,
- ;; but since minibuffer-message is used at the end of a command,
- ;; at a time when the command has virtually finished already, a C-g
- ;; should really cause an abort-recursive-edit instead (i.e. as if
- ;; the C-g had been typed at top-level). Binding inhibit-quit here
- ;; is an attempt to get that behavior.
- (inhibit-quit t))
- (unwind-protect
- (progn
- (unless (zerop (length message))
- ;; The current C cursor code doesn't know to use the overlay's
- ;; marker's stickiness to figure out whether to place the cursor
- ;; before or after the string, so let's spoon-feed it the pos.
- (put-text-property 0 1 'cursor t message))
- (overlay-put ol 'after-string message)
- (sit-for (or minibuffer-message-timeout 1000000)))
- (delete-overlay ol)))))
+
+ (when (timerp minibuffer-message-timer)
+ (cancel-timer minibuffer-message-timer))
+ (when (overlayp minibuffer-message-overlay)
+ (delete-overlay minibuffer-message-overlay))
+ (setq minibuffer-message-overlay
+ (make-overlay (point-max) (point-max) nil t t))
+ (setq minibuffer-message-timer
+ (run-with-timer (or minibuffer-message-timeout 1) nil
+ (lambda () (when (overlayp minibuffer-message-overlay)
+ (delete-overlay minibuffer-message-overlay)))))
+ (unless (zerop (length message))
+ ;; The current C cursor code doesn't know to use the overlay's
+ ;; marker's stickiness to figure out whether to place the cursor
+ ;; before or after the string, so let's spoon-feed it the pos.
+ (put-text-property 0 1 'cursor t message))
+ (overlay-put minibuffer-message-overlay 'after-string message)))
(defun minibuffer-completion-contents ()
"Return the user input in a minibuffer before point as a string.
next prev parent reply other threads:[~2019-12-02 23:00 UTC|newest]
Thread overview: 115+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-02 11:06 bug#38457: 27.0.50; dabbrev-expand regression due to message change Stephen Berman
2019-12-02 16:02 ` Eli Zaretskii
2019-12-02 23:00 ` Juri Linkov [this message]
2019-12-03 0:15 ` Stephen Berman
2019-12-03 3:36 ` Eli Zaretskii
2019-12-03 23:44 ` Juri Linkov
2019-12-04 3:38 ` Eli Zaretskii
2019-12-04 23:16 ` Juri Linkov
2019-12-05 3:43 ` Eli Zaretskii
2019-12-06 0:10 ` Juri Linkov
2019-12-06 7:44 ` Eli Zaretskii
2019-12-07 23:05 ` Juri Linkov
2019-12-08 3:28 ` Eli Zaretskii
2019-12-08 5:18 ` Eli Zaretskii
2019-12-08 21:50 ` Juri Linkov
2019-12-09 3:36 ` Eli Zaretskii
2019-12-09 7:43 ` Lars Ingebrigtsen
2019-12-09 14:00 ` Eli Zaretskii
2019-12-09 15:55 ` Eli Zaretskii
2019-12-11 7:32 ` Lars Ingebrigtsen
2019-12-11 7:35 ` Lars Ingebrigtsen
2019-12-11 16:30 ` Eli Zaretskii
2019-12-11 16:28 ` Eli Zaretskii
2019-12-24 16:30 ` Lars Ingebrigtsen
2019-12-24 17:50 ` Eli Zaretskii
2019-12-09 23:45 ` Juri Linkov
2019-12-10 3:36 ` Eli Zaretskii
2019-12-10 7:19 ` HaiJun Zhang
2019-12-10 16:11 ` Eli Zaretskii
2019-12-10 17:52 ` Drew Adams
2019-12-10 17:51 ` Drew Adams
2019-12-10 16:34 ` Eli Zaretskii
2019-12-10 17:08 ` Stefan Monnier
2019-12-10 17:49 ` Eli Zaretskii
2019-12-10 17:57 ` Eli Zaretskii
2019-12-10 23:45 ` Juri Linkov
2019-12-11 16:19 ` Eli Zaretskii
2019-12-11 17:34 ` Stefan Monnier
2019-12-11 17:50 ` Eli Zaretskii
2019-12-11 18:53 ` Stefan Monnier
2019-12-11 23:12 ` Juri Linkov
2019-12-12 4:39 ` Eli Zaretskii
2019-12-12 22:45 ` Juri Linkov
2019-12-13 8:25 ` Eli Zaretskii
2019-12-10 19:45 ` Stefan Monnier
2019-12-10 20:11 ` Eli Zaretskii
2019-12-10 21:45 ` Stefan Monnier
2019-12-11 3:24 ` HaiJun Zhang
2019-12-11 3:40 ` Eli Zaretskii
2019-12-11 3:59 ` HaiJun Zhang
2019-12-11 16:26 ` Eli Zaretskii
2019-12-12 4:33 ` HaiJun Zhang
2019-12-12 5:29 ` Eli Zaretskii
2019-12-12 22:58 ` Juri Linkov
2019-12-13 7:02 ` Eli Zaretskii
2019-12-13 9:07 ` Eli Zaretskii
2019-12-12 13:21 ` Stefan Monnier
2019-12-11 3:35 ` HaiJun Zhang
2019-12-11 16:11 ` Eli Zaretskii
2019-12-11 16:42 ` Eli Zaretskii
2019-12-11 23:24 ` Juri Linkov
2019-12-12 5:36 ` Eli Zaretskii
2019-12-12 11:08 ` Dmitry Gutov
2019-12-12 23:07 ` Juri Linkov
2019-12-13 8:46 ` Eli Zaretskii
2019-12-11 23:28 ` Juri Linkov
2019-12-12 5:41 ` Eli Zaretskii
2019-12-12 23:12 ` Juri Linkov
2019-12-13 8:57 ` Eli Zaretskii
2019-12-14 23:10 ` Juri Linkov
2019-12-15 15:35 ` Eli Zaretskii
2019-12-15 23:59 ` Juri Linkov
2019-12-16 16:09 ` Eli Zaretskii
2019-12-16 22:29 ` Juri Linkov
2019-12-16 23:26 ` Dmitry Gutov
2019-12-17 6:27 ` HaiJun Zhang
2019-12-17 16:19 ` Eli Zaretskii
2019-12-17 23:53 ` Juri Linkov
2019-12-18 3:38 ` HaiJun Zhang
2019-12-17 16:11 ` Eli Zaretskii
2019-12-17 23:51 ` Juri Linkov
2019-12-18 16:24 ` Eli Zaretskii
2019-12-19 0:12 ` Juri Linkov
2019-12-19 15:36 ` Eli Zaretskii
2019-12-19 22:16 ` Juri Linkov
2019-12-19 22:30 ` Dmitry Gutov
2019-12-19 23:17 ` Juri Linkov
2019-12-20 7:34 ` Eli Zaretskii
2019-12-19 22:52 ` Juri Linkov
2019-12-20 7:59 ` Eli Zaretskii
2019-12-21 22:09 ` Juri Linkov
2019-12-20 7:54 ` Eli Zaretskii
2019-12-21 22:02 ` Juri Linkov
2019-12-22 19:02 ` Eli Zaretskii
2019-12-20 14:29 ` Dmitry Gutov
2019-12-21 22:03 ` Juri Linkov
2019-12-23 10:10 ` Dmitry Gutov
2019-12-23 22:58 ` Juri Linkov
2019-12-24 0:42 ` Dmitry Gutov
2019-12-24 23:47 ` Juri Linkov
2019-12-25 16:30 ` Dmitry Gutov
2019-12-25 16:44 ` Eli Zaretskii
2019-12-25 16:49 ` Dmitry Gutov
2020-01-18 0:59 ` Dmitry Gutov
2020-01-18 8:19 ` Eli Zaretskii
2020-01-20 12:30 ` Dmitry Gutov
2020-01-21 16:15 ` Eli Zaretskii
2020-01-22 0:46 ` Dmitry Gutov
2020-01-18 1:00 ` Dmitry Gutov
2019-12-05 15:24 ` Kévin Le Gouguec
2019-12-05 16:36 ` Eli Zaretskii
2019-12-06 0:06 ` Juri Linkov
2019-12-06 7:41 ` Eli Zaretskii
2019-12-06 17:15 ` Kévin Le Gouguec
[not found] <<8736e3vve8.fsf@gmx.net>
[not found] ` <<8736e2coyv.fsf@mail.linkov.net>
[not found] ` <<83y2vujd0y.fsf@gnu.org>
[not found] ` <<87blspm0sm.fsf@mail.linkov.net>
[not found] ` <<837e3ckbem.fsf@gnu.org>
[not found] ` <<871rtjn0kt.fsf@mail.linkov.net>
[not found] ` <<83lfrrigj8.fsf@gnu.org>
[not found] ` <<87eexiqps5.fsf@mail.linkov.net>
[not found] ` <<83lfrphp94.fsf@gnu.org>
[not found] ` <<87wob7g2jk.fsf@mail.linkov.net>
[not found] ` <<83k177ebs0.fsf@gnu.org>
[not found] ` <<AE02ADC8-6567-4EB1-8A44-E60BC4B5807A@gnu.org>
[not found] ` <<87muc27prn.fsf@mail.linkov.net>
[not found] ` <<83tv6acgq5.fsf@gnu.org>
[not found] ` <<87eexdoygh.fsf@mail.linkov.net>
[not found] ` <<83tv68c0nb.fsf@gnu.org>
[not found] ` <<83h828b0lz.fsf@gnu.org>
2019-12-10 17:53 ` Drew Adams
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=8736e2coyv.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=38457@debbugs.gnu.org \
--cc=stephen.berman@gmx.net \
/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).