Изменение разрешения приводит к зависанию приложений за пределами экрана

Изменение разрешения приводит к зависанию приложений за пределами экрана

Я использую внешний монитор с моим MacBookPro (2012, последняя версия до дисплея Retina).

Без подключения к внешнему монитору разрешение на моем макбуке составляет 1440x900, и жизнь прекрасна.

Дома я подключаюсь к внешнему монитору (и зеркальным дисплеям) с тем же разрешением - жизнь прекрасна.
Однако, когда я прихожу в школу и устраиваюсь в лаборатории (и зеркальных дисплеях), я подключаюсь к внешнему монитору с максимальным разрешением 1280x900, как можно увидеть на скриншоте ниже

скриншот разрешения экрана

Проблема в том, что с потерей ширины разрешения все приложения, которые были увеличены (с зеленой кнопкой в ​​левом верхнем углу) для того, чтобы занять весь экран, склонны думать, что они все еще могут занимать 1440 пикселей в ширину. Это приводит к тому, что эти приложения обрезаются внешним монитором:

введите описание изображения здесь

Теперь мне приходится циклически проходить по всем открытым окнам всех моих приложений, чтобы изменить их размер для этого внешнего монитора. Кроме того, когда я возвращаюсь домой, мне приходится повторять этот процесс для разрешения 1440x900.

Есть ли способ избежать всего этого ручного изменения размера (возможно, автоматически или даже с помощью скрипта Apple, который сделает это за меня, когда обнаружит изменение разрешения)?

У меня Mac OS X 10.7.5 (Lion), если это имеет значение.

решение1

Я не уверен, что существует прямое решение вашей проблемы, то есть что-то, что позволило бы приложениям узнать истинные размеры меньшего экрана при зеркалировании.

Однако я использую комбинацию из двух утилит (к сожалению, платных) для управления перемещением между двумя офисами и домом (в каждом из которых к моему MacBook Pro подключены разные комбинации мониторов).

Они есть:

Договариваться (от Trifle Apps)

Оставаться (от Cordless Dog)

Итак, Arrange позволяет быстрее перемещать окна в точные места (сочетания клавиш, горячие углы или визуальная сетка, как вам больше нравится) и поддерживает несколько мониторов; Stay сохранит эти расположения для каждой конфигурации. Поэтому, как только он узнает, что монитор X означает, что окна A и B имеют определенный размер, он запомнит это в следующий раз, и если они отличаются на мониторе Y, он изменит их, когда вы подключите этот монитор.

У них обоих есть бесплатные пробные версии, так что вы можете попробовать их и посмотреть, помогут ли они. Извините, что не могу предложить бесплатное решение!

Обновлять

Теперь я использую Spectacle (Эрик Чарни) вместо Arrange. Это donationware, и, по моему опыту, он более стабилен. Он менее сложный, чем Arrange, но делает все, что мне нужно.

решение2

Stay не является бесплатным и не всегда обрабатывает все приложения (оно глючит)

Снекоторая помощь, мне удалось придумать этот скрипт, который отлично справляется с этой задачей:

property blacklist : {"Finder", "Preview", "Console", "AppleScript Editor", "Spotify", "TaskCoach"}
property buttonApps : {"LyX", "Eclipse"}
property buttonMaps : {{name:"LyX", Button:1, pname:"lyx"}, {name:"Eclipse", Button:2, pname:"eclipse"}}

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
                        say appName
                        set bounds of theWindow to newBounds
                    end if
                end repeat
            else if name is not in buttonApps then
                repeat with theWindow in windows
                    if visible of theWindow is true then
                        set bounds of theWindow to theBounds
                    end if
                end repeat
            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

Связанный контент