Nel caso in cui usi un'app che NON reagisce a AXZoomWindow in un modo standard (come BBEdit) o ti capita di avere diverse impostazioni "preferite" per windows di app diverse (Mi piace Mail meno largo di Safari), ho scritto uno script che massimizza la finestra in primo piano di un'applicazione e ripristina le preferenze individuali.
Ecco alcuni problemi che ho incontrato e ho dovuto risolvere:
1.) "frontmost process" quando chiamato in uno script è "System Events" o "ScriptEditor" - set visibile a 0.
(NON si applica alle scorciatoie di Karabiner.)
2.) max. i valori del desktop sono definiti da size of scroll area 1 of process "Finder"
3.) L'altezza della barra dei menu sul mio sistema è 22px, quindi ho dovuto sottrarli in vari posti
4.) Ho combinato valori per posizione e amp; dimensione in una variabile reciproca per app - Sostituisci con la tua!
5.) Per poter indirizzare solo le app che vuoi "Zoomare" c'è "maxMin" per escludere le altre -
aggiungi o elimina app a tuo piacimento
6.) Ovviamente dovrai registrare lo script / app con "Accesso assistito" (Sicurezza / Preferenze di sistema)
7.) O scorciatoia questo script come un "Servizio" (tramite Automator) in Sys-Prefs, Tastiera, scorciatoie, ...
8.) ... o usa l'ingegnoso key-remapper Karabiner Elements con una semplice "Modifica complessa":
"from": {"key_code": "m", "modifiers": {"mandatory": ["left_option"]} },
"to": [{"shell_command": "osascript ~/.config/myScpts/maxMin_zoom.app"}], **
"type": "basic"
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
(** path and name: your choice)
che offre una scorciatoia adeguata sul posto - Ho optato per "Opt-M" poiché la maggior parte delle combo "Z" sono in uso.
Ecco lo script (DELETE lines 2 & 3 per Karabiner):
tell application "System Events"
set visible of first process whose frontmost is 1 to 0
delay 0.2
set dTopSize to size of scroll area 1 of process "Finder" as list
set maxPos to {0, 22}
set realApp to first process whose frontmost is true
set froAppName to (name of first process whose frontmost is true) as string
set maxMin to true
if (froAppName is "BBEdit") then
set appBounds to {0, 22, 888, (item 2 of dTopSize) - 22}
else if (froAppName is "Safari") then
set appBounds to {38, 22, 1372, (item 2 of dTopSize) - 22}
else if (froAppName is "Mail") then
set appBounds to {53, 22, 1314, (item 2 of dTopSize) - 22}
else
set maxMin to false
end if
if maxMin then
if item 1 of (size of window 1 of realApp as list) is not equal to ¬
item 1 of dTopSize then
set position of window 1 of realApp to maxPos
set size of window 1 of realApp to {(item 1 of dTopSize), ¬
(item 2 of dTopSize) - 22}
else
set size of window 1 of realApp to {item 3 of appBounds, ¬
item 4 of appBounds}
set position of window 1 of realApp to {item 1 of appBounds, ¬
item 2 of appBounds}
end if
end if
tell realApp to set frontmost to true
end tell