unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Gerd Möllmann" <gerd.moellmann@gmail.com>
To: martin rudalics <rudalics@gmx.at>
Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org
Subject: Re: Q: child frames on ttys
Date: Wed, 21 Aug 2024 09:10:41 +0200	[thread overview]
Message-ID: <m21q2iic5q.fsf@pro2.fritz.box> (raw)
In-Reply-To: <m2v7zz800o.fsf@pro2.fritz.box> ("Gerd Möllmann"'s message of "Sat, 17 Aug 2024 20:41:43 +0200")

Gerd Möllmann <gerd.moellmann@gmail.com> writes:

>> It was discussed in some length in a thread "Implementing child frames
>> on terminal" starting here
>>
>> https://lists.nongnu.org/archive/html/emacs-devel/2022-07/msg00301.html
>>
>> but IIRC nothing ever came out of it.
>>
>> martin
>
> Thanks for the pointer, Martin!

I've taken a look today, and I think the tty stuff is in principle still
like it was when I wrote it, plus some additions like multi-tty of
course.

Anyway, I think the below would be a viable plan how to add child frames
for ttys. Or a very rough first approach.

Any comments? Did I overlook something important?

* What we have

Child frames are created with the =parent-frame= frame parameter on
GUIs. This parameter can be changed at any time to create a hierarchy
of child fremes. It can be reset to make a frame a non-child frame.

A terminal's =tty_display_info= contains a =top_frame= member which is the
topmost frame in z-order, where z-order is a bit misleading because
all frames currently occupy the whole terminal screen. IOW making a
frame the topmost frame obsures all other frames.

Redisplay considers topmost frames only (more than one for multiple
terminals).

The function =frame-restack= can be used to change the z-order of
frames. It currently does not handle tty frames.

=frame-list= contains child frames.

* Terminology

A =root frame= is a frame with no parent frame. It always occupies the
whole terminal.

* Steps

1. Let frames have arbitrary ~(x, y, w, h)~ except for root frames,
   which have ~(0, 0, terminal-width, terminal-height)~. Change
   =frame-geometry=.

2. Give root frames a =child_frames= list which is in z-order, topmost
   last. Add a =tty-frame-restack= which acts on this list.

3. In =redisplay_internal=, act only on root frames. Generating desired
   glyphs generates glyphs for the root frame, then child frames in
   z-order, topmost last, i.e. in the order of =frame::child_frames=.

4. Making a frame visible means making all children frames visible.

5. Do not clear the terminal, unless switching to another root frame.

6. Update: Build frame matrices for all windows visible on a terminal.
   Copy visible parts of child fraem desired glyphs to root frame
   desired glyphs. Then write to the screen.

7. After writing to the screen, copy visble parts of root frame
   current glyphs to current glyphs of children.

8. Add something like =ns-frame-list-z-order= for ttys.

* Don't

1. Allocate child frame glyphs from a common pool. Reason is clipping.
   Don't want to change glyph generation in redisplay to take clipping
   into account. It's not worth the effort.




  reply	other threads:[~2024-08-21  7:10 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-17  7:24 Q: child frames on ttys Gerd Möllmann
2024-08-17 10:39 ` Eli Zaretskii
2024-08-17 11:02   ` Gerd Möllmann
2024-08-17 17:18   ` martin rudalics
2024-08-17 18:41     ` Gerd Möllmann
2024-08-21  7:10       ` Gerd Möllmann [this message]
2024-08-21  7:55         ` martin rudalics
2024-08-21  8:03           ` Gerd Möllmann
2024-08-21  8:11             ` Robert Pluim
2024-08-21  8:38               ` Gerd Möllmann
2024-08-21 12:00         ` Gerd Möllmann
2024-08-30  6:42           ` Gerd Möllmann
2024-08-30  9:17             ` martin rudalics
2024-08-30 11:03               ` Eli Zaretskii
2024-08-30 11:23                 ` Gerd Möllmann
2024-08-30 14:53                   ` Eli Zaretskii
2024-08-31  8:26                 ` Gerd Möllmann
2024-08-31 11:54                   ` Eli Zaretskii
2024-08-31 14:00                     ` Gerd Möllmann
2024-08-31 14:40                       ` Eli Zaretskii
2024-09-02  8:37                         ` Gerd Möllmann
2024-09-02 11:38                           ` Eli Zaretskii
2024-09-02 12:46                             ` Gerd Möllmann
2024-09-02 13:13                               ` Eli Zaretskii
2024-09-02 13:54                                 ` Gerd Möllmann
2024-08-30 11:09               ` Gerd Möllmann
2024-08-30  9:29             ` Robert Pluim
2024-08-30 11:19               ` Gerd Möllmann
2024-08-30 12:00                 ` Robert Pluim
2024-08-30 12:37                   ` Gerd Möllmann
2024-08-30 21:11 ` Dmitry Gutov
2024-08-31  6:45   ` Eli Zaretskii
2024-08-31  8:46     ` Po Lu
2024-09-01  0:27       ` Dmitry Gutov
2024-09-16  1:35         ` Dmitry Gutov
2024-09-01  0:27     ` Dmitry Gutov

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=m21q2iic5q.fsf@pro2.fritz.box \
    --to=gerd.moellmann@gmail.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=rudalics@gmx.at \
    /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).