My MBP 15" display is pretty much just the right size, providing large fonts for my aging eyes. There are times though where I want to bump the resolution up to see more of my windows. I got tired of manually going to System Preferences and adjusting the display resolution, so I decided to create a set of AppleScript routines to do it for me. I’m sharing here in case it might be useful to others.
I have written functions to
- Get the current resolution
- Set it to a specific value
- Increment by one
- Decrement by one
Because I was forced to use UI Scripting, the resolution values are as follows
I wrote this as a Script Library, as I anticipate calling these routines in other scripts. I use Keyboard Maestro to create hotkeys that increase and decrease the resolution on demand
I also created a similar macro for the minus key to call decreaseScreenResoultion()
to use this,
- Take the attached script and open it in Script Editor
- Save it in the folder
~/Library/Script Libraries
with the nameMy Display Utilities
of file typescript
You are then able to call all of the functions within it like this
tell script "My Display Utilities"
decreaseScreenResoultion()
end tell
Script file
(*
Error message codes
*)
set ERR_AT_MIN_RESOLUTION to 500
set ERR_AT_MAX_RESOLUTION to 501
set ERR_UNKNOWN_RESOLUTION to 502
set ERR_INVALID_RESOLUTION_REQUESTED to 503
(*
Helper function to open System Preferences and summon the Displays tab
*)
to showDisplaysTab()
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.displays"
tell its pane "Displays"
anchor "displaysDisplayTab"
end tell
end tell
end showDisplaysTab
(*
Helper function to get the buttons from System Preferences that control the reolution.
This assumes that the display of interest is labeled "Built-in Retina Display". Other
display configurations may require tweaks.
Returns: a Radio Group of 5 buttons, where button 1 is the lowest resolution (biggest
pixels) and button 5 is the densest resolution (smallest pixels). This Radio Group
requires UI Scripting ("System Events") to access it.
*)
on getRetinaResolutionRadioGroup()
tell me to showDisplaysTab()
delay 0.3
tell application "System Events"
tell process "System Preferences"
tell window "Built-in Retina Display"
tell tab group 1
click radio button "Display"
tell radio group 1
click radio button "Scaled"
end tell
return radio group 1 of group 1
end tell
end tell
end tell
end tell
end getRetinaResolutionRadioGroup
(*
Get the current value of the display resolution.
Returns: a number from 1 to 5 where 1 is the lowest resolution (biggest
pixels) and 5 is the densest resolution (smallest pixels).
*)
on getScreenResolution()
set current_resolution_button to 0
set rg to getRetinaResolutionRadioGroup()
tell application "System Events"
tell rg
repeat with button_number from 1 to 5
if value of radio button button_number is true then
return button_number
end if
end repeat
end tell
end tell
-- Expected selected button not found, throw an error
error "Current resolution button to in range of 1-5" number ERR_UNKNOWN_RESOLUTION
end getScreenResolution
(*
Sets the display resolution using a number from 1 to 5 where 1 is the lowest resolution (biggest
pixels) and 5 is the densest resolution (smallest pixels).
*)
on setScreenResolution to new_value
if new_value is less than 1 or new_value is greater than 5 then
error "Invalid resolution request: must be in range of 1-5" number ERR_INVALID_RESOLUTION_REQUESTED
end if
set rg to getRetinaResolutionRadioGroup()
tell application "System Events"
tell rg to click radio button new_value
end tell
end setScreenResolution
(*
Decreases the display resolution by one notch
*)
on decreaseScreenResoultion()
set current_resolution to getScreenResolution()
try
setScreenResolution to current_resolution - 1
on error ERR_INVALID_RESOLUTION_REQUESTED
error "You are at the minimum resolution already" number ERR_AT_MIN_RESOLUTION
end try
end decreaseScreenResoultion
(*
Increases the display resolution by one notch
*)
on increaseScreenResoultion()
set current_resolution to getScreenResolution()
--display dialog current_resolution
try
setScreenResolution to current_resolution + 1
on error ERR_INVALID_RESOLUTION_REQUESTED
error "You are at the maximum resolution already" number ERR_AT_MAX_RESOLUTION
end try
end increaseScreenResoultion