Я столкнулся с той же проблемой некоторое время назад, и вот что я сделал:
Сначала я отразил дисплеи, как уже было предложено. Вскоре после этого я понял, что очень неприятно, когда краем глаза у меня выключен экран MacBook. Это потребовало, чтобы я убил яркость на экране MacBook. Но будучи ленивым парнем, я ненавидел необходимость вручную регулировать яркость каждый раз, когда отключал / подключал внешний монитор. Поэтому я подумал, есть ли способ автоматизировать этот процесс. Я нашел это бесплатное приложение под названием Control Plane, которое позволяет мне устанавливать «контексты» в зависимости от того, подключены ли определенные устройства (мониторы, жесткие диски и т. Д.), Находятся ли определенные Wi-Fi-сети в зоне действия и т. Д .; и на основании этих условий запускают определенные сценарии оболочки. Так что все, что мне нужно было сделать, это написатьkillBrightness.scpt
) убить яркость на экране macbook и вызвать скрипт оболочки killBrightness.scpt
; и вызвать этот сценарий оболочки в необходимом контексте.
killBrightness.scpt
tell application "System Preferences" to set current pane to pane "Displays"
tell application "System Events"
tell process "System Preferences"
repeat with theWindow in windows
if title of theWindow as string is "Color LCD" then
tell tab group 1 of theWindow
tell slider 1 of group 2
set value to 0
end tell
end tell
end if
end repeat
end tell
end tell
tell application "System Preferences" to quit
Сценарий оболочки
#!/bin/sh
osascript /path/to/killBrightness.scpt
Поскольку я подключил к своему MacBook много разных мониторов, я заметил, что когда подключен один монитор с другим соотношением сторон, мои окна свисают с края экрана. Решением этой проблемы будет изменение размеров окон, но это крайне неэффективно, когда вы используете тонну приложений и окон, как я; Кроме того, мне так же лениво, как и мне, не понравилось это решение. Итак, с помощью приятных ребят из Stack Overflow я смог придумать этот AppleScript (называемый resizer.scpt
) для автоматического изменения размера всех окон (почти) всех приложений (оговорка в том, что некоторые приложения не используют правильные Фреймворки пользовательского интерфейса перехватывают, поэтому изменить их размер довольно сложно)
resizer.scpt
:
property blacklist : {"Finder", "Preview", "Console", "AppleScript Editor", "Spotify", "TaskCoach", "Skype", "VirtualBox"}
property buttonApps : {"LyX", "Eclipse"}
property buttonMaps : {{name:"LyX", Button:1, pname:"lyx"}, {name:"Eclipse", Button:2, pname:"eclipse"}, {name:"Spotify", Button:3, pname:"Spotify"}, {name:"TaskCoach", Button:3, pname:"TaskCoach"}}
tell application "Finder" to set theBounds to bounds of window of desktop
tell application "System Events"
set bids to bundle identifier of processes where background only is false
end tell
repeat with bid in bids
tell application id bid
if name is not in blacklist then
set appName to name as string
if name is "Terminal" then
set newBounds to {0, 0, (item 3 of theBounds) - 10, item 4 of theBounds}
repeat with theWindow in windows
if visible of theWindow is true then
set bounds of theWindow to newBounds
end if
end repeat
else if name is not in buttonApps then
try
repeat with theWindow in windows
if visible of theWindow is true then
set bounds of theWindow to theBounds
end if
end repeat
end try
else if name is in buttonApps then
-- get the buttonNumber
repeat with buttonApp in buttonMaps
if (name of buttonApp as string) is appName then
set theButton to Button of buttonApp
end if
end repeat
tell application "System Events"
repeat with theProcess in (processes where bundle identifier is bid)
try
tell theProcess to tell window 1 to click button theButton
end try
end repeat
end tell
end if
end if
end tell
end repeat
Теперь все, что мне нужно было сделать, это написать аналогичный сценарий оболочки для вызова resizer.scpt
и поместить его в ControlPlane, и я был снова настроен быть ленивым!
Надеюсь это поможет
PS: я забыл упомянуть, что все это было сделано на моем 15-дюймовом MacBook Pro под управлением Lion