A alteração da resolução deixa os aplicativos pendurados fora da tela

1

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

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

Em casa, conecto a um monitor externo (e exibições espelhadas) com a mesma resolução - a vida útil é ótima.
No entanto, quando eu venho para a escola e me coloco no laboratório (e telas espelhadas), eu conecto a um monitor externo com uma resolução máxima aparente de 1280x900, como pode ser visto na imagem abaixo

Oproblemaéque,comaperdanalarguradaresolução,todososaplicativosqueforamampliados(comobotãoverdenocantosuperioresquerdo)paraocuparatelacheiatendemapensarqueaindapodemocupar1440pixelsdelargura.Issotemoefeitodeessesaplicativosseremcortadospelomonitorexterno:

Agora, sou forçado a percorrer todas as janelas abertas de todos os meus aplicativos para redimensioná-los para esse monitor externo. Além disso, quando eu voltar para casa, tenho 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 faça isso para mim quando detectar uma alteração na resolução)?

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

    
por inspectorG4dget 10.01.2013 / 03:05

2 respostas

0

Não tenho certeza de uma solução direta para o seu problema, ou seja, algo que permita que os aplicativos saibam as dimensões reais da tela menor ao espelhar.

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

Eles são:

Organize ( da Trifle Apps )

Fique ( por Cordless Dog )

Assim, o Arrange torna as janelas em movimento para locais precisos mais rápidos (atalhos de teclado, cantos quentes ou uma grade visual, como você preferir) e é ciente de vários monitores; A estadia salvará esses acordos em uma configuração por configuração. Então, uma vez que ele aprende que o monitor X significa que as janelas A e B têm um certo tamanho, ele se lembrará da próxima vez, e se forem diferentes no monitor Y, ele será alterado quando você conectar o monitor.

Ambos têm testes gratuitos, então você pode dar uma chance e ver se eles ajudam. Desculpe não poder oferecer uma solução grátis!

Atualizar

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

    
por 10.01.2013 / 15:59
1

A estadia não é gratuita e também não lida com todos os aplicativos o tempo todo (é buggy)

Com alguma ajuda , consegui criar este applescript que faz o trabalho com perfeição:

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
    
por 30.01.2013 / 21:43