首页 > 解决方案 > 如何设置显示器以通过键盘快捷键或“热键”进行更改?

问题描述

我在 macOS 上使用 2 台显示器。在 System Preferences >> Displays >> Appearances 下,我可以更改显示设置,以便显示器并排,一个在另一个之上,等等。

我经常需要将设置从一个并排更改为一个在另一个之下,而且每次都必须进入系统偏好设置并手动更改它是很痛苦的。

我该如何设置它,以便当我按下一些“热键”或键盘快捷键时它会自动执行?

我可以访问 Alfred for Mac,因此可以在自定义工作流程中编写代码,这将有助于实现这一目标。

任何想法将不胜感激!

标签: macosapplescriptalfred

解决方案


这是一个调用 python 脚本在显示集之间切换的脚本。它仅设置为更改第二个显示器的相对位置,但可以轻松扩展为与三个或更多显示器一起使用。

请注意,您不必对新位置非常精确。Quartz 会自动调整以提供最接近的配置,其中显示空间无缝接触。

set displaySet to first item of ¬
    (choose from list {"On left", "On right", "On top", "On bottom"} ¬
        with prompt "Choose position for second display.")

(* assuming 1280 x 800 pixel displays *)
if displaySet is "On top" then
    changeSecondDisplayOrigin(0, -800)
else if displaySet is "On bottom" then
    changeSecondDisplayOrigin(0, 800)
else if displaySet is "On left" then
    changeSecondDisplayOrigin(-1280, 0)
else
    changeSecondDisplayOrigin(1280, 0)
end if


on changeSecondDisplayOrigin(x, y)
    do shell script "
/usr/bin/python <<END

import objc
import Quartz

from Quartz.CoreGraphics import CGGetActiveDisplayList
from Quartz.CoreGraphics import CGBeginDisplayConfiguration
from Quartz.CoreGraphics import CGConfigureDisplayOrigin
from Quartz.CoreGraphics import CGCompleteDisplayConfiguration

(activeErr, activeDisplays, displayCount) = Quartz.CGGetActiveDisplayList(2, None, None);
secondDisplay = activeDisplays[1];

(configErr, displayConfigRef) = CGBeginDisplayConfiguration(None);
moveErr = CGConfigureDisplayOrigin(displayConfigRef, secondDisplay, " & x & ", " & y & ");
completeErr = CGCompleteDisplayConfiguration(displayConfigRef, 2);

END"
end changeSecondDisplayOrigin

推荐阅读