-
-
Save v1c77/96affa87de94045d29cdc5f9cb8c1847 to your computer and use it in GitHub Desktop.
-- | |
-- Created by: v1c77 | |
-- Created on: 2018/7/21 | |
-- | |
-- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
-- Version 2, December 2004 | |
-- Copyright (C) 2020 v1c77 | |
-- Everyone is permitted to copy and distribute verbatim or modified | |
-- copies of this license document, and changing it is allowed as long | |
-- as the name is changed. | |
-- DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE | |
-- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
-- 0. You just DO WHAT THE FUCK YOU WANT TO. | |
use AppleScript version "2.7" -- Yosemite (10.10) or later | |
use scripting additions | |
tell application "System Preferences" | |
quit | |
delay 0.5 | |
launch | |
activate | |
set current pane to pane "com.apple.preference.displays" | |
--reveal pane id "com.apple.preference.displays" | |
end tell | |
tell application "System Events" | |
tell application process "System Preferences" | |
tell window "DELL U2415" -- change the window name for different display | |
delay 1 | |
click radio button "Display" of tab group 1 | |
set theGroup to tab group 1 | |
tell pop up button "Rotation:" of theGroup | |
set theStat to value of it | |
click | |
tell menu 1 | |
if theStat = "Standard" then | |
click menu item 4 -- 270 dig | |
else | |
click menu item 1 -- standard | |
end if | |
end tell | |
end tell | |
end tell | |
end tell | |
end tell | |
tell application "System Preferences" | |
quit | |
end tell | |
My final version of the script includes arrangement logic with help of displayplacer.
In the script above replace
-- Arrange displays here somehow 🤷♂️
with
-- Arrange monitors
delay 0.1
if theRotation = "Standard" then
-- vertical arrangement
do shell script "/opt/homebrew/bin/displayplacer \"id:8B54EED0-06DA-6D6D-0857-D6964E3302DB res:1080x1920 scaling:on origin:(180,-1920) degree:90\""
else
-- horizontal arrangement
do shell script "/opt/homebrew/bin/displayplacer \"id:8B54EED0-06DA-6D6D-0857-D6964E3302DB res:1920x1080 scaling:on origin:(-240,-1080) degree:0\""
end if
See displayplacer Instructions how to get the script string for your desired arrangement in vertical and horizontal setup.
Thanks a lot @oluckyman! The addition of the display placer makes it stellar ⭐
Thanks @oluckyman ! I re-posted a snippet of your gist on this StackOverflow question and credited you.
@sleeptil3 How did you get the Apple Script to work as a shortcut. I get a "Shortcuts is not allowed assistive access" error. Note: I gave it access under the privacy settings pane. I also tried creating an AppleScript app. It pops up the same error. The script itself runs fine. Thanks
Thank you very much for the script @v1c77, @oluckyman and @codeanpeace.
Does anyone know how to make it work on macOS Ventura Version 13.0.1?
Arrangement logic still works, but the script runs into this error after the system preference opens:
error "System Settings got an error: AppleEvent handler failed." number -10000
Update for MacOS Ventura new System Settings
tell application "System Events"
key code 107 using {option down}
delay 1
tell window "Displays" of application process "System Settings"
tell pop up button 0 of group 4 of scroll area 2 of group 0 of group 2 of splitter group 0 of group 0
set currentRotation to value of it
click
tell menu 1
if currentRotation = "Standard" then
click menu item 4 -- 270°
else
click menu item 1 -- standard
end if
end tell
end tell
delay 1
if exists of sheet 1 then
click button 1 of group 0 of sheet 1
end if
end tell
end tell
delay 1
tell application "System Settings"
quit
end tell
Thank you very much @marcelliino
This script works if the external monitor is chosen as the main display.
Installed macOS Ventura recently. Glad to see that there is updated script already. Thank you @marcelliino!
I wanted to automate external monitor selection, but was not able to click on buttons representing displays. Maybe it's a bug, or my AppleScript skills.
For now added a 5sec delay, to have time to select the proper monitor.
Here is the mix of mine and @marcelliino scripts:
tell application "System Events"
key code 107 using {option down}
delay 1
tell window "Displays" of application process "System Settings"
(*
The script below works only when the external monitor is selected.
I was not able to select it programmatically:
Displays are represented as buttons in `scroll area 1`,
but nothing happens when they receive `click` command
So, ask user for help with this and click on the proper monitor
*)
-- Give user 5 sec to click on the monitor to rotate
set autoClose to 5
set continueButton to "Continue (in " & autoClose & " sec)"
set stopButton to "Stop"
display dialog "Select monitor to rotate" giving up after autoClose buttons {stopButton, continueButton} default button continueButton cancel button stopButton
-- This only works when the external monitor is selected (by default or by user)
tell pop up button 0 of group 4 of scroll area 2 of group 0 of group 2 of splitter group 0 of group 0
set theRotation to value of it
click
tell menu 1
if theRotation = "Standard" then
click menu item "90°"
else
click menu item "Standard"
end if
end tell
end tell
-- Confirm new display setting
delay 1
if exists of sheet 1 then
click button 1 of group 0 of sheet 1
end if
-- Arrange monitors
delay 0.1
if theRotation = "Standard" then
-- vertical arrangement
do shell script "/opt/homebrew/bin/displayplacer \"id:8B54EED0-06DA-6D6D-0857-D6964E3302DB res:1692x3008 scaling:on origin:(0,-3008) degree:90\""
else
-- horizontal arrangement
do shell script "/opt/homebrew/bin/displayplacer \"id:8B54EED0-06DA-6D6D-0857-D6964E3302DB res:2560x1440 scaling:on origin:(-427,-1440) degree:0\""
end if
end tell
end tell
delay 0.5
tell application "System Settings"
quit
end tell
On my Mac air M2 (Ventura 13.3.1a)
error "System Events got an error: Can’t get application process "System Settings"." number -1728 from application process "System Settings"
Hi @alissoneloi, did you find and alternative to bypass the error message? I've found that if I activate it twice, it opens without any issues
tried on Sonoma with no success
I just upgraded to Ventura and am also getting the error System events got an error: Can't get window "Displays" of application process "System Settings"
@sleeptil3 thanks for the followup! I was not aware that you can pin a shortcut to the Menu Bar. Nice!