From: Eli Zaretskii <eliz@gnu.org>
To: Ken Raeburn <raeburn@permabit.com>
Cc: 11822@debbugs.gnu.org
Subject: bug#11822: 24.1; emacsclient terminal mode captures escape characters as text
Date: Tue, 08 Sep 2015 20:33:04 +0300 [thread overview]
Message-ID: <83bndc7r5b.fsf@gnu.org> (raw)
In-Reply-To: <37C523EE-3D76-40F7-B7B2-99D6F0BD7B97@permabit.com>
> From: Ken Raeburn <raeburn@permabit.com>
> Date: Tue, 8 Sep 2015 06:15:47 -0400
> Cc: 11822@debbugs.gnu.org
>
> > The face cache of a new frame should start out empty, so clearing it
> > is a no-op. But maybe you mean something else, I didn't yet have a
> > good look at the backtraces.
>
> Since there’s nothing to clear out on that frame, there should be no need to make the call. But we make it, and the call we make forces the clearing of all caches, not just the one for that frame.
Therefore, we should prevent the effect of that on other frames. I
see no need for this effect, since faces are frame-local.
> > The face cache is per-frame, so indeed, there should be no effect on
> > other frames. If the backtraces indicate otherwise, I'd be surprised.
>
> Unfortunately Fclear_face_cache (and global variables like face_change_count or windows_or_buffers_changed) isn’t frame-specific. So — I expect but haven’t tested — changing screenGamma on an existing frame will probably also force faces to be recomputed on every frame.
Then we should make them part of the frame structure, and only clear
the face cache of a single frame at a time -- the frame on which a
change to faces requires that.
> >> 5) Even better, can we do the other-display updates in small increments, so that once we start doing those updates we don’t have a block of 160*RTT seconds where we’re unresponsive to new user input?
> >
> > Not sure I understand the idea; please elaborate about the increments
> > you had in mind.
>
> In realize_basic_faces we call realize_named_face 14 times and realize_default_face once. For a display that’s not the one the user appears to be using (selected frame is elsewhere, no X events received), I’m wondering if we can have Emacs check for events (user input on any frame, subprocess output, etc), if there are none, realize one face, check for events again, etc., and when all of the faces are done, do any needed updates to the frame. Give priority to user interaction as much as possible, both in terms of handling input events and prioritizing updates to certain frames over others. Of course, if we get events associated with that other frame/display, or a call is made to force redisplay, we’d want to get things updated right away.
I'm still not following you: what do input events have to do with the
need to redisplay or not redisplay some frame(s)?
> That’s probably a lot of work. :-) But maybe there are some smaller changes that could be made. Do we have to realize all 15 right away?
The way the code is written, it expects the basic faces to be
realized, yes.
> If it’s not the selected frame, perhaps it doesn’t need the (active) mode line face
As you see from your backtraces, Emacs changes the selected frame many
times behind your back, so this is not true.
Anyway, I think preventing frames from being unnecessarily redisplayed
will bring larger benefits than just avoiding realization of some
faces.
> and if there are no tool bar or scroll bars, it doesn’t need those faces either. Maybe they could be processed later as (or if) needed?
We would need flags to manage that. Once again, I don't think the
basic faces are the main problem as long as they are rtealized only
for the frame(s) that really need them to be recomputed.
next prev parent reply other threads:[~2015-09-08 17:33 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-30 0:08 bug#11822: 24.1; emacsclient terminal mode captures escape characters as text Ken Raeburn
2012-06-30 5:55 ` Eli Zaretskii
2012-07-31 21:06 ` Ken Raeburn
2012-08-08 3:13 ` Ken Raeburn
2012-08-08 4:52 ` Dan Nicolaescu
2012-08-08 9:26 ` Ken Raeburn
2012-08-09 21:12 ` Ken Raeburn
2012-08-10 6:16 ` Eli Zaretskii
2012-08-10 7:27 ` Ken Raeburn
2012-08-10 7:46 ` Eli Zaretskii
2012-08-10 8:08 ` Eli Zaretskii
2015-09-07 21:09 ` Ken Raeburn
2015-09-08 1:29 ` Stefan Monnier
2015-09-08 4:29 ` Eli Zaretskii
2015-09-08 6:53 ` Ken Raeburn
2015-09-08 13:03 ` Stefan Monnier
2015-09-08 13:11 ` Stefan Monnier
2015-09-08 17:21 ` Eli Zaretskii
2015-09-08 4:48 ` Eli Zaretskii
2015-09-08 10:15 ` Ken Raeburn
2015-09-08 13:35 ` Stefan Monnier
2015-09-08 17:33 ` Eli Zaretskii [this message]
2015-09-08 19:54 ` Ken Raeburn
2015-09-09 14:16 ` Eli Zaretskii
2015-09-10 6:59 ` Ken Raeburn
2015-09-10 15:36 ` Eli Zaretskii
2015-09-10 17:56 ` Stefan Monnier
2015-09-10 18:06 ` Eli Zaretskii
2015-09-11 12:56 ` Stefan Monnier
2015-09-11 13:53 ` Eli Zaretskii
2015-09-11 16:53 ` Stefan Monnier
2015-09-11 6:54 ` Ken Raeburn
2015-09-11 7:22 ` Eli Zaretskii
2015-09-11 23:11 ` Ken Raeburn
2015-09-12 0:51 ` Stefan Monnier
2015-09-12 1:34 ` Ken Raeburn
2015-09-15 14:29 ` Eli Zaretskii
2015-09-15 16:14 ` Stefan Monnier
2015-09-18 14:19 ` Eli Zaretskii
2015-09-21 9:23 ` Ken Raeburn
2015-09-21 9:44 ` Eli Zaretskii
2015-09-23 17:27 ` Ken Raeburn
2015-09-23 18:04 ` martin rudalics
2015-09-23 20:59 ` Ken Raeburn
2015-09-23 19:17 ` Eli Zaretskii
2015-09-24 8:52 ` Ken Raeburn
2015-09-24 18:46 ` Eli Zaretskii
2015-09-24 20:08 ` Ken Raeburn
2015-09-25 6:49 ` Eli Zaretskii
2015-09-25 12:07 ` Stefan Monnier
2015-09-26 7:01 ` Eli Zaretskii
2015-09-25 6:50 ` Eli Zaretskii
2015-09-25 12:09 ` Stefan Monnier
2015-09-25 13:29 ` Eli Zaretskii
2015-09-25 15:18 ` Stefan Monnier
2015-09-12 7:30 ` Eli Zaretskii
2015-09-11 13:39 ` Stefan Monnier
2015-09-11 14:01 ` Eli Zaretskii
2015-09-08 13:22 ` Stefan Monnier
2015-09-08 17:25 ` Eli Zaretskii
2015-09-08 18:52 ` Stefan Monnier
2015-09-08 19:08 ` Eli Zaretskii
2015-09-08 20:37 ` Stefan Monnier
2015-09-08 17:36 ` 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
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=83bndc7r5b.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=11822@debbugs.gnu.org \
--cc=raeburn@permabit.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).