That works for me applied to a recent master. Happy to use the buffer local. It's unlikely to cause trouble if a user doesn't kill it, and we'll understand why if they don't.

On Mon, Jan 27, 2025 at 1:01 PM martin rudalics <rudalics@gmx.at> wrote:
 > These are the two options on the table?
 >
 > (let ((frame-inhibit-make-frame-hidden-buffer-check t))
 >    (with-current-buffer " *string-pixel-width*"
 >      (make-frame)))
 > ;; could also do this if users want the behavior all the time
 > (setq frame-inhibit-make-frame-hidden-buffer-check t)
 >
 > (with-current-buffer " *string-pixel-width*"
 >    (setq-local frame-inhibit-make-frame-hidden-buffer-check t)
 >    (make-frame)
 >    (kill-local-variable 'frame-inhibit-make-frame-hidden-buffer-check))
 >
 > I prefer the former over the latter.

I prefer these ones

(let ((frame-inhibit-make-frame-hidden-buffer-check t))
   (with-current-buffer " *string-pixel-width*"
     (make-frame)))

;; Set the default for all buffers.
(setq-default frame-inhibit-make-frame-hidden-buffer-check t)

;; Set the buffer-local value.
(with-current-buffer " *string-pixel-width*"
   (setq frame-inhibit-make-frame-hidden-buffer-check t))

with the attached patch.

 > It seems harmonious with other
 > frame-related controls such as frame-resize-pixelwise
 > and frame-inhibit-implied-resize, unless I'm missing some subtlety, which I
 > surely am.

The subtlety is that a leading space in a buffer name is a buffer-local
property, a property which affects only the buffer wearing that name and
no other buffers.

'frame-resize-pixelwise' and 'frame-inhibit-implied-resize' are (or
better should be) frame properties, properties that affect a frame and
consequently all buffers displayed on that frame.

martin