> potentially make-frame-on-display could call it
I haven't tried it yet, but I suspect this may not work: the reason is that DISPLAY is actually the same before and after; it's ":1" in both cases, despite the DPI being different between the two displays. (Is this the root cause of the bug?)
> Does any of the above allow you to solve the issue?
After my previous email, I found a workaround which is clearly a hack but works well enough to satisfy me: changing the size of the default font appears to be able to cancel out the wrong DPI more or less visually identically. The code looks like this:
(defun radian-local-make-it-bigger ()
(interactive)
(set-face-attribute 'default nil :height (* (face-attribute 'default :height) 2)))
(defun radian-local-make-it-smaller ()
(interactive)
(set-face-attribute 'default nil :height (/ (face-attribute 'default :height) 2)))
(bind-key "s--" #'radian-local-make-it-smaller)
(bind-key "s-=" #'radian-local-make-it-bigger)
There are some issues with rounding errors, but it's a lot better than nothing. I just use those keybindings whenever plugging in or unplugging my external monitor.