Subject: Re: bug#76691: `display-monitor-attributes-list` not working properly on macOS

From: Stefan Kangas <[email-masked]>
Date: Mon, 3 Mar 2025 11:56:16 -0800

found 76691 30.1
found 76691 31.0.50
tags 76691 + confirmed
thanks

Ruiyang Wu <[email-masked]> writes:

> I am using the official NS port Emacs 30.1 on a MacBook (macOS Sequoia) with an external monitor. The output of `display-monitor-attributes-list` is as follows:
>> (((geometry 0 0 1512 982) (workarea 0 38 1512 944) (mm-size 301 195) (frames) (source . "NS")) ((geometry 1512 -517 1600 900 (workarea 1512 -517 1600 875) (mm-size 549 311) (frames #<frame scratch* 0x12d08e430>) (source . "NS")))
> It fails to recognize my monitors. Furthermore, when I run `M-x make-frame-on-monitor`, no candidate is provided.
>
> However, if I use `emacs-mac` from https://bitbucket.org/mituharu/emacs-mac/src/master/, the monitors can be correctly recognized. `display-monitor-attributes-list` prints
>> (((geometry 0 0 1512 982) (workarea 0 38 1512 944) (mm-size 301 196) (frames) (name . "Built-in Retina Display") (backing-scale-factor . 2)) ((geometry 1512 -517 1600 900) (workarea 1512 -492 1600 875) (mm-size 549 311) (frames #<frame *scratch* - GNU Emacs at Ruiyangs-MBP 0x1400a62c8>) (name . "DELL U2515H") (backing-scale-factor . 2)))
> And I can also use `make-frame-on-monitor` to create new frames without issue.
>
> Is it possible to have the aforementioned behavior from `emacs-mac` in the official NS port? That would greatly improve my workflow. Thank you very much!

I can reproduce this on current master, in other words,

    M-x make-frame-on-monitor RET

doesn't provide any completion candidates.

In `make-frame-on-monitor`, I see that this

    (mapcar (lambda (a)
              (cdr (assq 'name a)))
            (display-monitor-attributes-list))

produces this on both macOS and GNU/Linux:

    (nil nil)

So I guess this is not specific to the NS port?

Juri, since you added this command, WDYT?