From 6b7a080691563eadf7b8652f1af4dfa21986ba4e Mon Sep 17 00:00:00 2001 From: Ship Mints Date: Mon, 16 Dec 2024 17:58:10 +0100 Subject: [PATCH] Support pixelwise frame cloning (Bug#74750) * lisp/frame.el (clone-frame): Honor 'frame-resize-pixelwise' when cloning a frame's geometry via the 'text-pixels' feature of 'make-frame' (Bug#74750). Correctly specify source frame in 'display-graphic-p' test for tty selection behavior. (cherry picked from commit 61f1d7fc682c28b3e67a9d8f529ff7046dfdbff1) --- lisp/frame.el | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lisp/frame.el b/lisp/frame.el index 69ddd28c7de..092f93bf941 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -863,6 +863,9 @@ When called from Lisp, returns the new frame." (defun clone-frame (&optional frame no-windows) "Make a new frame with the same parameters and windows as FRAME. With a prefix arg NO-WINDOWS, don't clone the window configuration. +When the user option `frame-resize-pixelwise' is non-nil, and FRAME is +not text-only, clone the originating frame's pixel size. Otherwise, use +the number of FRAME's columns and lines for the clone. FRAME defaults to the selected frame. The frame is created on the same terminal as FRAME. If the terminal is a text-only terminal then @@ -875,10 +878,17 @@ also select the new frame." (seq-remove (lambda (elem) (memq (car elem) frame-internal-parameters)) (frame-parameters frame))) - (new-frame (make-frame))) + new-frame) + (when (and frame-resize-pixelwise + (display-graphic-p frame)) + (push (cons 'width (cons 'text-pixels (frame-text-width frame))) + default-frame-alist) + (push (cons 'height (cons 'text-pixels (frame-text-height frame))) + default-frame-alist)) + (setq new-frame (make-frame)) (when windows (window-state-put windows (frame-root-window new-frame) 'safe)) - (unless (display-graphic-p) + (unless (display-graphic-p frame) (select-frame new-frame)) new-frame)) -- 2.39.5