emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "Final" version of tty child frames


From: Gerd Möllmann
Subject: Re: "Final" version of tty child frames
Date: Wed, 15 Jan 2025 18:29:24 +0100
User-agent: Gnus/5.13 (Gnus v5.13)

martin rudalics <rudalics@gmx.at> writes:

>>> Back to redisplay optimization.
>>
>> Does this mean you've solved the problem in set_cursor_from_row?
>> Because that problem, if it's real, has nothing to do with redisplay
>> optimizations.
>
> Turning the table: When I insert a character in the row at hand the
> problem doesn't occur.  When I just move point it does occur.  Why?

These two cases will probably end up in different places in
redisplay_internal.

> First special case the approach to tty frames.  On a tty there is only
> one cursor in the selected window so we don't have to care about the
> cursor in any window but the selected one.  Right?

Right, but I would check if set_cursor_from_row sets something that is
used somewhere else. I don't think so, but it's something like 450 lines
long, so I won't bet.

(And I think anything special has only to be done if the frame is a root
frame AND has visible children. Only a root frame's current matrix can
be affected, and only by visible children.)

>
> In set_cursor_from_row in step 1 advance over the border glyphs of a
> child frame, over any glyph whose object is a buffer but not the buffer
> of the selected window and maybe over any glyph whose object is nil (I
> don't know what kind of such glyphs might exist - maybe the
> truncation/continuation line glyphs).  Whatever it is, we have to bypass
> the
>
>          /* glyph was not inserted by redisplay for internal purposes */
>          && !NILP (glyph->object))
>
> check.

Hm, you should be able to use glyph::frame here somewhere. if matrix is
the current matrix, and the frame is a tty root frame, and glyph->frame
!= frame, then it can come only from a child frame would be my theory.

>
> If the glyph at point is not an object of the selected window's buffer,
> the cursor is not shown (IIUC there is a separate routine for detecting
> that but we maybe could do it here right away).  Otherwise show the
> cursor as usual.

I think you mean is_cursor_obscured in dispnew.c? Maybe that could
indeed be used. I'm using the current matrix and glyph::frame there.

>
> If step 1 fails, we could try a similar approach in step 2 (stop when a
> glyph's object is at PT) but I didn't look into that yet.
>
> martin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]