* Increasing the rate of modeline display [not found] <CAAdUY-LLaSjRgx3FXi1OdrhS6EgBkhrLknjBW5EKMdhuHAJUeA@mail.gmail.com> @ 2015-03-05 20:24 ` Artur Malabarba 2015-03-06 8:04 ` Eli Zaretskii 0 siblings, 1 reply; 9+ messages in thread From: Artur Malabarba @ 2015-03-05 20:24 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 384 bytes --] Is there a way to (temporarily) increase the rate at which the mode line is redisplayed? I was trying to write a package that adds a spinner to the mode line (to indicate ongoing operations), but I hit a wall because the mode line sometimes takes many seconds to redisplay. I started writing a solution with timers, but that seems like a lot of work for something so simple. Cheers [-- Attachment #2: Type: text/html, Size: 438 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-05 20:24 ` Increasing the rate of modeline display Artur Malabarba @ 2015-03-06 8:04 ` Eli Zaretskii 2015-03-06 8:50 ` Artur Malabarba 2015-03-06 9:12 ` Artur Malabarba 0 siblings, 2 replies; 9+ messages in thread From: Eli Zaretskii @ 2015-03-06 8:04 UTC (permalink / raw) To: bruce.connor.am; +Cc: emacs-devel > Date: Thu, 5 Mar 2015 17:24:56 -0300 > From: Artur Malabarba <bruce.connor.am@gmail.com> > > Is there a way to (temporarily) increase the rate at which the mode line is > redisplayed? > > I was trying to write a package that adds a spinner to the mode line (to > indicate ongoing operations), but I hit a wall because the mode line sometimes > takes many seconds to redisplay. You cannot increase the rate of redisplay, because it is already "as fast as possible": Emacs enters redisplay whenever the Lisp interpreter has nothing else to do. There are no Emacs-induced delays that you could slash, AFAIK. In particular, any time the mode line changes it will be redisplayed immediately when Emacs has a chance to do so. "Takes many seconds" sounds like something I never saw, except when some Lisp code is running during that time. If you have Lisp code running and want to initiate redisplay while Lisp is still running, then yes, it could be a bit tricky. But it isn't clear to me that this is your case, especially as you are talking about "rate". So I guess you aren't telling us something important that prevents redisplay from kicking in in your case. Please add details, or post a simple self-contained example of the problem. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-06 8:04 ` Eli Zaretskii @ 2015-03-06 8:50 ` Artur Malabarba 2015-03-06 9:12 ` Artur Malabarba 1 sibling, 0 replies; 9+ messages in thread From: Artur Malabarba @ 2015-03-06 8:50 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 458 bytes --] > Lisp is still running, then yes, it could be a bit tricky. But it > isn't clear to me that this is your case, especially as you are > talking about "rate". > > So I guess you aren't telling us something important that prevents > redisplay from kicking in in your case. Please add details, or post a > simple self-contained example of the problem. I'll try with emacs -Q and report back. Maybe something like erc or jabber was running in the background. [-- Attachment #2: Type: text/html, Size: 587 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-06 8:04 ` Eli Zaretskii 2015-03-06 8:50 ` Artur Malabarba @ 2015-03-06 9:12 ` Artur Malabarba 2015-03-06 9:13 ` Artur Malabarba 2015-03-06 10:20 ` Eli Zaretskii 1 sibling, 2 replies; 9+ messages in thread From: Artur Malabarba @ 2015-03-06 9:12 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel > You cannot increase the rate of redisplay, because it is already "as > fast as possible": Emacs enters redisplay whenever the Lisp > interpreter has nothing else to do. There are no Emacs-induced delays > that you could slash, AFAIK. I think I had my wording wrong. General redisplay works fine (I see the cursor blinking and stuff like that), but the mode-line content doesn't update if I'm not interacting. I guess what I want is to `force-mode-line-redisplay' around once per second (right now, it goes without update indefinitely if the user is not interacting, see below). > In particular, any time the mode line changes it will be redisplayed > immediately when Emacs has a chance to do so. "Takes many seconds" > sounds like something I never saw, except when some Lisp code is > running during that time. I ran the following after emacs -Q. (add-to-list 'mode-line-format '(:eval (number-to-string (cadr (current-time)))) 'append) This adds a number to the mode-line which changes at every second. If I'm typing text (or otherwise interacting) then I see it updating fine. If I just take my hands off the keyboard, then the number stops updating indefinitely. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-06 9:12 ` Artur Malabarba @ 2015-03-06 9:13 ` Artur Malabarba 2015-03-06 10:20 ` Eli Zaretskii 1 sibling, 0 replies; 9+ messages in thread From: Artur Malabarba @ 2015-03-06 9:13 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel > `force-mode-line-redisplay' around once per second (right now, it goes GAAAH! `force-mode-line-update' I mean ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-06 9:12 ` Artur Malabarba 2015-03-06 9:13 ` Artur Malabarba @ 2015-03-06 10:20 ` Eli Zaretskii 2015-03-06 11:20 ` Artur Malabarba 1 sibling, 1 reply; 9+ messages in thread From: Eli Zaretskii @ 2015-03-06 10:20 UTC (permalink / raw) To: bruce.connor.am; +Cc: emacs-devel > Date: Fri, 6 Mar 2015 06:12:27 -0300 > From: Artur Malabarba <bruce.connor.am@gmail.com> > Cc: emacs-devel <emacs-devel@gnu.org> > > I think I had my wording wrong. General redisplay works fine (I see > the cursor blinking and stuff like that), but the mode-line content > doesn't update if I'm not interacting. Could be a bug: if the contents of mode line changes, Emacs should redisplay it on the first opportunity. But see below. > > In particular, any time the mode line changes it will be redisplayed > > immediately when Emacs has a chance to do so. "Takes many seconds" > > sounds like something I never saw, except when some Lisp code is > > running during that time. > > I ran the following after emacs -Q. > > (add-to-list 'mode-line-format > '(:eval (number-to-string (cadr (current-time)))) > 'append) > > This adds a number to the mode-line which changes at every second. If > I'm typing text (or otherwise interacting) then I see it updating > fine. If I just take my hands off the keyboard, then the number stops > updating indefinitely. How can Emacs know that the value of the eval form changed? It can't, unless it actually eval's it, can it? When you type, Emacs eval's the form because other factors cause it do it, that's why you see what you see. When nothing happens, Emacs doesn't know that anything on screen should change, so it doesn't try to see whether the mode line changed, and doesn't eval the form, because the display engine tries very hard not to redisplay things that are unchanged, to avoid unpleasant flickering this causes. You will see that 'display-time', which does similar things, uses a timer, which changes the mode-line contents independently of Emacs recomputing it. What real-life use case is behind your example? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-06 10:20 ` Eli Zaretskii @ 2015-03-06 11:20 ` Artur Malabarba 2015-03-06 11:34 ` Eli Zaretskii 2015-03-06 13:24 ` Thien-Thi Nguyen 0 siblings, 2 replies; 9+ messages in thread From: Artur Malabarba @ 2015-03-06 11:20 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel > How can Emacs know that the value of the eval form changed? It can't, > unless it actually eval's it, can it? Yes, I understand why the default behavior is like that. I was wondering whether there was a simple way to change that temporarily (e.g. have the mode-line update at least once per second). > You will see that 'display-time', which does similar things, uses a > timer, which changes the mode-line contents independently of Emacs > recomputing it. Thanks for the pointer. I've now resigned to using timers as well (wasn't terrible, but about half the code is dedicated to that now =/). > What real-life use case is behind your example? I'm writing a package that adds a spinner to the mode-line (some form of simple ascii animation to indicate that there is an ongoing operation). For that, I need to update the mode-line every second (preferably twice per second), while the spinner is active. Here is the (mostly finished) code: https://github.com/Bruce-Connor/spinner.el ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-06 11:20 ` Artur Malabarba @ 2015-03-06 11:34 ` Eli Zaretskii 2015-03-06 13:24 ` Thien-Thi Nguyen 1 sibling, 0 replies; 9+ messages in thread From: Eli Zaretskii @ 2015-03-06 11:34 UTC (permalink / raw) To: bruce.connor.am; +Cc: emacs-devel > Date: Fri, 6 Mar 2015 08:20:41 -0300 > From: Artur Malabarba <bruce.connor.am@gmail.com> > Cc: emacs-devel <emacs-devel@gnu.org> > > > How can Emacs know that the value of the eval form changed? It can't, > > unless it actually eval's it, can it? > > Yes, I understand why the default behavior is like that. I was > wondering whether there was a simple way to change that temporarily > (e.g. have the mode-line update at least once per second). We could perhaps add a feature for this kind of applications, if it's deemed important. In general, there are options to inhibit redisplay optimizations, but they are meant for debugging only, and so are enabled only if you build with --enable-checking=glyphs. > > You will see that 'display-time', which does similar things, uses a > > timer, which changes the mode-line contents independently of Emacs > > recomputing it. > > Thanks for the pointer. I've now resigned to using timers as well > (wasn't terrible, but about half the code is dedicated to that now > =/). Couldn't you just slightly customize display-time instead? It can be told to update once a second, perhaps even faster (I didn't try faster than once a second, though). ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Increasing the rate of modeline display 2015-03-06 11:20 ` Artur Malabarba 2015-03-06 11:34 ` Eli Zaretskii @ 2015-03-06 13:24 ` Thien-Thi Nguyen 1 sibling, 0 replies; 9+ messages in thread From: Thien-Thi Nguyen @ 2015-03-06 13:24 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 905 bytes --] () Artur Malabarba <bruce.connor.am@gmail.com> () Fri, 6 Mar 2015 08:20:41 -0300 I've now resigned to using timers as well (wasn't terrible, but about half the code is dedicated to that now =/). See: http://lists.gnu.org/archive/html/gnu-emacs-sources/2007-02/msg00006.html for "fsm", a nice way to abstract these async bits. I once set up a half-dozen fsm-based visual geegaws and it was a very smooth albeit trippy-kitch experience, but hey, [insert Kundera treatise on life accidents and kitch, here :-D]. YMMV, etc. I lack bandwidth, but if someone else wants to polish up fsm for GNU ELPA, i would be happy to mentor (somewhat haphazardly). -- Thien-Thi Nguyen GPG key: 4C807502 (if you're human and you know it) read my lisp: (responsep (questions 'technical) (not (via 'mailing-list))) => nil [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 197 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-03-06 13:24 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <CAAdUY-LLaSjRgx3FXi1OdrhS6EgBkhrLknjBW5EKMdhuHAJUeA@mail.gmail.com> 2015-03-05 20:24 ` Increasing the rate of modeline display Artur Malabarba 2015-03-06 8:04 ` Eli Zaretskii 2015-03-06 8:50 ` Artur Malabarba 2015-03-06 9:12 ` Artur Malabarba 2015-03-06 9:13 ` Artur Malabarba 2015-03-06 10:20 ` Eli Zaretskii 2015-03-06 11:20 ` Artur Malabarba 2015-03-06 11:34 ` Eli Zaretskii 2015-03-06 13:24 ` Thien-Thi Nguyen
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).