Subject: bug#75056: 31.0.50; tty-child-frames with server / multiple clients possible hangs

From: Gerd Möllmann <[email-masked]>
Date: Wed, 29 Jan 2025 20:09:49 +0100

martin rudalics <[email-masked]> writes:

>> Back from the drawing board, please find now 3 patches attached.
>
> Works pretty well so far.  I'll do some further experiments with it.

Thanks!

> Next question: What is the special purpose of 'tty_child_pos_param'?
> With a negative value it makes a frame disappear on the left of the
> parent which is not bad per se.  But the manual says:
>
>   A negative integer relates the right frame edge to the right edge of the
>   display or parent frame.
>
> So
>
>   (modify-frame-parameters nil '((left . -5)))
>
> on a GUI child frame moves the right edge of the child frame by 5 pixels
> left of the right edge of the parent.  Inherently, negative positions
> are deprecated on GUIs.

You mean this one (nice copy function I pilfered from the Internetz):

frame.c:
 1451 int
 1452 tty_child_pos_param (struct frame *child, Lisp_Object key,
 1453                      Lisp_Object params, int dflt)
 1454 {
 1455   Lisp_Object val = Fassq (key, params);
 1456   if (CONSP (val))
 1457     {
 1458       val = XCDR (val);
 1459       if (FIXNUMP (val))
 1460         return XFIXNUM (val);
 1461     }
 1462   return dflt;
 1463 }
 1464 

It has no inherent special purpose, and probably has a bug as you
describe. Like perhaps the one for the size. Both are an attempt to
mimic what is done for window-system frames, while being depressed that
that cannot be easily reused, and being too lazy to rewrite the whole
frame parameter department :-).

>
> Also when I want to move a child frame to the left of its parent via
>
>   (modify-frame-parameters nil '((left . 0)))
>
> the left border disappears.  Is that intended?

If I understand that correctly, then probably yes. The borders are drawn
around the frame, so the left border is at left - 1, the right at left +
width + 1, and so on.

Whatever is outside of the terminal is clipped.