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: martin rudalics
Subject: Re: "Final" version of tty child frames
Date: Sat, 11 Jan 2025 11:13:51 +0100
User-agent: Mozilla Thunderbird

> LGTM, please apply.

I've looked a bit further and have found out two more things.

When with emacs -Q -nw I call tty-2 specified as

(defun tty-2 ()
  (interactive)
  (let* ((window (minibuffer-window))
         (frame (make-frame))
         (child
          (make-frame
           `((parent-frame . ,frame) (minibuffer . ,window)
             (left . 20) (top . 10)
             (width . 0.3) (height . 0.8)
             (border-width . 0)
             (background-color . "yellow")))))
    (select-frame-set-input-focus child)))

and type into the new child frame I get a crash similar to the one
before.  The minibuffer frame must have the same root frame as any of
its client frames.  The attached patch should fix that too.

The restriction to not make minibuffer-only child frames is unnecessary.
The attached patch fixes that as well.  Tested with emacs -Q -nw and

(unless window-system (xterm-mouse-mode 1))
(defvar tty-child-mini-only nil)

(defun tty-4 ()
  (interactive)
  (let* ((child
          (make-frame
           `((parent-frame . ,(selected-frame)) (minibuffer . only)
             (left . 20) (top . 10)
             (width . 0.3) (height . 0.3)
             (border-width . 0)
             (background-color . "yellow")))))
    (setq tty-child-mini-only child)))

(defun tty-5 ()
  (interactive)
  (let* ((child
          (make-frame
           `((parent-frame . ,(selected-frame))
             (minibuffer . ,(frame-root-window tty-child-mini-only))
             (left . 40) (top . 10)
             (width . 0.3) (height . 0.8)
             (border-width . 0)
             (background-color . "orange")))))
    (select-frame-set-input-focus child)))

(defun tty-6 ()
  (interactive)
  (make-frame-invisible  tty-child-mini-only))

First make a minibuffer-only child frame via tty-4.  Then via tty-5 make
a new child frame using the one made by tty-4 as its minibuffer frame.
Hide the minibuffer-only child frame via tty-6 (you have to invoke this
from the root frame).  Now in the child frame made via tty-5 type C-h f.
Here the minibuffer-only child frame is made visible and gets input
focus.

martin


Attachment: tty-child-frame.diff
Description: Text Data


reply via email to

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