Alterar a resolução deixa os aplicativos fora da tela

Alterar a resolução deixa os aplicativos fora da tela

Estou usando um monitor externo com meu MacBookPro (2012, última versão antes da tela retina).

Sem conectar a um monitor externo, a resolução do meu macbook é 1440x900 e a vida é boa.

Em casa, conecto um monitor externo (e telas espelhadas) com a mesma resolução - a vida é ótima.
Porém, quando venho para a escola e me instalo no laboratório (e nos monitores espelhados), conecto-me a um monitor externo com resolução máxima aparente de 1280x900, como pode ser visto na imagem abaixo

captura de tela da resolução da tela

O problema é que com a perda na largura da resolução, todos os aplicativos que foram ampliados (com o botão verde no canto superior esquerdo) para ocupar a tela inteira, tendem a pensar que ainda podem ocupar 1440 pixels de largura. Isso faz com que esses aplicativos sejam cortados pelo monitor externo:

insira a descrição da imagem aqui

Agora sou forçado a percorrer todas as janelas abertas de todos os meus aplicativos para redimensioná-los para este monitor externo. Além disso, quando voltar para casa, terei que repetir esse processo para a resolução 1440x900.

Existe uma maneira de evitar todo esse redimensionamento manual (talvez automatizado, ou talvez até mesmo um applescript que fará isso por mim quando detectar uma alteração na resolução)?

Estou no Mac OS X 10.7.5 (Lion), se for importante

Responder1

Não tenho certeza de uma solução direta para o seu problema, ou seja, algo que permita aos aplicativos saber as verdadeiras dimensões da tela menor durante o espelhamento.

No entanto, eu uso uma combinação de dois utilitários (infelizmente não gratuitos) para gerenciar a movimentação entre dois escritórios e uma casa (cada um com uma combinação diferente de monitores conectados ao meu MacBook Pro).

Eles são:

Arranjo (por Trifle Apps)

Ficar (por Cachorro Sem Fio)

Portanto, o Arrange torna mais rápida a movimentação de janelas para locais precisos (atalhos de teclado, cantos quentes ou uma grade visual, como você preferir) e reconhece vários monitores; Stay salvará esses arranjos por configuração. Assim, quando descobrir que o monitor X significa que as janelas A e B têm um determinado tamanho, ele se lembrará da próxima vez e, se forem diferentes no monitor Y, ele os alterará quando você conectar o monitor.

Ambos têm testes gratuitos, então você pode experimentá-los e ver se eles ajudam. Lamentamos não poder oferecer uma solução gratuita!

Atualizar

Agora eu uso o Spectacle (por Eric Czarny) em vez de Organizar. É doação e parece ser mais estável na minha experiência. É menos sofisticado que o Arrange, mas faz tudo que preciso.

Responder2

Stay não é gratuito e também não lida com todos os aplicativos o tempo todo (tem bugs)

Comalguma ajuda, consegui criar este applescript que faz o trabalho perfeitamente:

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

informação relacionada