Lembre-se dos tamanhos e posicionamento das janelas ao desconectar e reconectar o segundo monitor

99

Aqui está algo que é péssimo:

  1. Conecte o monitor externo ao laptop (Mac OS X Leopard no meu caso).
  2. Organize suas janelas para ter o IDE em uma tela e o navegador em outra. (Etc etc. Redimensione, reorganize, alarido, alarido, alarido.)
  3. Desconecte o monitor para executar uma reunião ou qualquer outra coisa.
  4. Vá para 1.

Eu gostaria de substituir a etapa 2 por "o computador lembra exatamente como eu a tinha e apenas a coloca de volta dessa maneira".

(Pessoalmente, só preciso de uma solução para Mac, mas coletar soluções para outros sistemas aqui pode ser útil para outras pessoas. Tenho certeza de que é um problema comum.)

dreeves
fonte

Respostas:

56

Dê uma olhada no Stay by Cordless Dog. Eu acredito que ele faz exatamente o que você está procurando.

Tony Arnold
fonte
2
Eu tentei isso. Ele não funciona no Windows X11, mas parece ser o mesmo que anunciado. Obrigado pelo ponteiro! Pode ser que este seja o mais próximo que temos de uma solução para Mac atualmente.
dreeves
As janelas X11 não são instâncias "reais" do NSWindow (pelo menos não foram da última vez que verifiquei), portanto, não é uma grande surpresa que o Stay não tenha nada a ver com elas :) Que bom que funcionou de outra maneira!
11
Parece bom, mas não está funcionando com aplicativos de tela cheia no Lion. Eu tenho o Safari no modo de tela cheia quando tenho 1 monitor e depois de anexar o segundo monitor, quero sair da tela inteira e mover o Safari para o segundo monitor. O Stay não move nenhum aplicativo em tela cheia.
11
Parecia um bom ajuste. Porém, com três monitores externos, muitas vezes ele teve problemas com as posições e resolveu o problema para 50%. Então eu ainda tinha que fazer muito trabalho manual. Acabei de desinstalar. Ah, e seu único teste de 30 dias!
Ernst Ernst
15

Slate é umaplicativo Mac gratuito muito poderosoque faz exatamente o que você deseja. Quando você conecta seu monitor secundário, ele detecta automaticamente o novo monitor e todas as suas janelas são movidas e redimensionadas da maneira que você gosta. Você pode definir posições e tamanhos personalizados para todos os seus aplicativos, incluindo tela cheia, meia tela e com base em grade.

Uma das coisas mais legais sobre o Slate é que você pode definir diferentes layouts com base em quantos monitores você conectou . Por exemplo, se você estiver usando seu laptop sozinho, convém que todos os seus aplicativos preencham a tela inteira. Mas quando você tem um monitor secundário maior, convém dividir a tela entre o navegador, o correio e a música. Slate faz isso facilmente.

Você também pode definir atalhos de teclado para layouts e ações específicos, como mover e redimensionar janelas em uma determinada porcentagem.

Abaixo está o meu arquivo de configuração. Eu mantenho todos os meus aplicativos em tela cheia em todos os meus monitores, mas você pode alterá-lo para torná-los na metade ou em outro tamanho:

# Monitor Aliases
alias mon-laptop    0    # variable for my laptop monitor
alias mon-hp        1    # my external HP monitor

# Window Position Regions
alias hp-full        move screenOriginX;screenOriginY screenSizeX;screenSizeY         ${mon-hp}
alias hp-left        move screenOriginX;screenOriginY screenSizeX/2;screenSizeY         ${mon-hp}
alias hp-right       move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY         ${mon-hp}
alias laptop-full        move screenOriginX;screenOriginY screenSizeX;screenSizeY         ${mon-laptop}
alias laptop-left        move screenOriginX;screenOriginY screenSizeX/2;screenSizeY         ${mon-laptop}
alias laptop-right       move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY         ${mon-laptop}
alias laptop-righttop    move screenOriginX+screenSizeX/2;screenOriginY screenSizeX/2;screenSizeY/2       ${mon-laptop}
alias laptop-rightbottom move screenOriginX+screenSizeX/2;screenOriginY+screenSizeY/2    screenSizeX/2;screenSizeY/2       ${mon-laptop}

# Window layouts for when I have 2 monitors
layout 2monitor 'Google Chrome':REPEAT ${hp-full}
layout 2monitor 'iCal':REPEAT ${hp-full}
layout 2monitor 'Coda':REPEAT ${hp-full}
layout 2monitor 'Mail':REPEAT ${laptop-full}
layout 2monitor 'Rdio':REPEAT ${laptop-full}
layout 2monitor 'Spotify':REPEAT ${laptop-full}
layout 2monitor 'Evernote':REPEAT ${laptop-full}

# Single monitor window layouts
layout 1monitor 'Google Chrome':REPEAT ${laptop-full}
layout 1monitor 'iCal':REPEAT ${laptop-full}
layout 1monitor 'Coda':REPEAT ${laptop-full}
layout 1monitor 'Mail':REPEAT ${laptop-full}
layout 1monitor 'Rdio':REPEAT ${laptop-full}
layout 1monitor 'Spotify':REPEAT ${laptop-full}
layout 1monitor 'Evernote':REPEAT ${laptop-full}

# Keyboard shortcuts for each layout
bind l:shift;ctrl layout 2monitor
bind g:shift;ctrl grid padding:5 0:2,1 1:2,2

# Auto-detect when a monitor is plugged in or out
default 2monitor count:2
default 1monitor count:1

Aqui está a lista de recursos da página do Slit no GitHub:

  • Altamente personalizável
  • Ligue as teclas a:
    • mover e / ou redimensionar janelas
    • direcionar janelas do foco
    • ativar layouts predefinidos
    • crie, exclua e ative instantâneos do estado atual do Windows
  • Defina layouts padrão para diferentes configurações de monitor que serão ativadas quando essa configuração for detectada.
  • Dicas de janela: uma maneira intuitiva de alterar o foco da janela
  • [Beta] Um alternador de aplicativos melhor e mais personalizável.

Aqui está um ótimo tutorial sobre como tirar o máximo proveito do Slate.

Ben
fonte
Pode se lembrar de como as janelas foram posicionadas quando os monitores externos foram conectados pela última vez e apenas restaurá-los? O aplicativo "Stay" quase faz isso, mas continua a não lembrar do Windows (principalmente o Chrome), então ainda estou procurando algo melhor.
dreeves
@ Dreeves Sim, funciona para mim. Acabei de fazer isso manualmente, usando os itens de menu do Slate, “Take Snapshot” e “Activate Snapshot”; se você clicar neles antes e depois de colocar o computador em suspensão, salvará e restaurará todas as suas posições na janela. A partir dos documentos , parece que o Slate pode executar o "Ativar instantâneo" automaticamente com sua defaultdiretiva . Não sei se você pode automatizar a parte "Take Snapshot".
Rory O'Kane
2
Quero ressaltar que, para o caso de uso dos OPs, eles podem simplesmente clicar em salvar instantâneo e restaurar o instantâneo no menu. Enquanto houver apenas uma configuração de janela desejada, ela deverá funcionar bem sem mexer com mais nada.
Muhd
4
Slate não é mais mantido, eles sugerem usar Hammerspoon agora.
certainlyakey
8

Resolvi isso com um pequeno AppleScript e o pequeno utilitário freeware Quicksilver.

  1. Salve este AppleScript pequeno em um local que não seja alterado no seu computador:

    try
        tell application "Adium"
            activate
            tell window "contacts"
                set the bounds to {1281, 200, 1460, 850}
            end tell
            tell chat windows
                set the bounds to {1281, 800, 1800, 1200}
            end tell
        end tell
    end try
    
    try
        tell application "iTunes"
            activate
            set the bounds of the first window to {1750, 520, 2700, 1150}
        end tell
    end try
    
    try
        tell application "Terminal"
            activate
            set the bounds of the first window to {2450, 320, 3180, 950}
        end tell
    end try
    
    try
        tell application "Firefox"
            activate
            set the bounds of the first window to {1460, 20, 2800, 950}
        end tell
    end try
    
  2. Você precisará personalizar quais aplicativos você deseja no seu monitor e a janela fica do jeito que você gosta. Sou programador e a configuração acima é como executo meu segundo monitor.

  3. Instale o Quicksilver .

    Optei por não ficar visível no Dock e apenas executei como um pequeno daemon da barra de tarefas

  4. Configure um comando de chave no Quicksilver e arraste e solte seu AppleScript da etapa 1 na janela como a ação a ser executada. Eu liguei para CommandShiftA. Funciona bem!

user3439894
fonte
3
Não é especialmente escalável se você tiver um bom número de aplicativos para gerenciar. Nem é fácil de gerenciar! Limites de codificação embutida realmente não são divertidos.
Fatuhoku
Você pode definir a área de trabalho em que o aplicativo aparece?
dangerousdave
3

Antes de desconectar o monitor, feche tudo o que não está totalmente no monitor principal. Os aplicativos geralmente salvam seu estado (incluindo o posicionamento da janela) quando eles fecham e o leem quando são abertos; portanto, se o segundo monitor estiver presente nos dois momentos, você deve estar bem.

Você pode tirar proveito dos aplicativos que permitem a abertura de mais de uma instância por vez, mas salva apenas o estado de perto. Feche a instância de vários monitores (que faz com que o estado seja salvo). Desconecte o segundo monitor. Se você tem uma segunda instância em execução, ela deve ser reposicionada no monitor principal ou você pode iniciar outra instância. Não feche esta instância antes de conectar o segundo monitor novamente e iniciar outra instância (que leria a configuração de vários monitores na inicialização). Em seguida, você pode sair da instância de monitor único (salvando esse estado) e, em seguida, da instância de vários monitores (substituindo o estado de monitor único).

Uma opção mais complexa pode incluir descobrir onde o estado é salvo, fazer backup e gravar um arquivo / script em lote para restaurá-lo antes de abrir o aplicativo, o que permitiria criar um link para fazer isso automaticamente quando você iniciar o aplicativo .

Finalmente, pode haver um utilitário para a sua plataforma, ou escrever um pode não ser muito complexo. Para o Windows, existe um programa chamado ShiftWindow que pode reposicionar as janelas na inicialização do aplicativo ou em uma determinada tecla de acesso. Receio não conhecer o MacOS o suficiente para dizer se existe um utilitário semelhante. Essa é provavelmente a solução ideal, perdendo apenas para que o sistema operacional suporte essa coisa diretamente.


fonte
11
Obrigado! Não é a resposta que eu esperava, mas uma boa vantagem!
dreeves
3

Eu apenas segui http://cordlessdog.com/stay/ , funciona muito bem para mim, embora com um pouco de atraso

Depois de instalar o seu mac, você pode iniciá-lo e armazenar as janelas da maneira que desejar. Portanto, sempre que você desconectar seus monitores e conectar-se novamente, todas as janelas serão restauradas.

Talvez você precise adicionar stay como seu aplicativo de inicialização, porque será necessário iniciá-lo sempre que reiniciar o seu mac.

kvm006
fonte
2

Corrigi isso sem nenhum aplicativo externo.

Tudo que você precisa fazer é garantir que o seu laptop seja "Desktop 1" e seu Monitor Externo "Desktop 2"

você pode fazer isso movendo a barra de menus branca para a tela do laptop em Preferências do sistema> Monitores> Arranjo

Moosa Ahmed
fonte
1

Pelo menos no Windows, muitos aplicativos serão restaurados se você os maximizar antes de trocar de monitor. Deixe-os em paz enquanto estiver na reunião e restaure-os após reconectar.

Ainda é uma correção incompleta (e complicada), mas é a única coisa que sei fazer se eu quiser alguma chance de ressuscitar minhas janelas cuidadosamente colocadas. ShiftWindow parece intrigante embora ...

E se você passa de dois monitores para um, Alt + Barra de Espaço + M, as teclas de seta são um salva-vidas (Windows novamente, desculpe) se você "perder" suas janelas.


fonte
1

http://www.irradiatedsoftware.com/twoup/index.html

Encontrei isso através do Lifehacker e funciona muito bem para mim. Estou usando a versão pro SizeUp, em vez do TwoUp gratuito, e é perfeito.


fonte
Você está dizendo que isso resolve o problema que eu coloquei? A página que você vinculou não parece mencionar nada sobre isso.
314 dreeves
11
Não, isso não resolve o problema. O SizeUp facilita a movimentação de uma janela para onde você deseja, mas você ainda precisa alternar manualmente entre cada janela e informar ao SizeUp onde deseja mover cada uma.
Rory O'Kane
1

Sou usuário do Windows e estava procurando como desativar o novo recurso do Windows 7 para afastar todas as janelas do monitor externo desconectado. Encontrei o recibo (para placas de vídeo ATI) para definir todos os valores de DMMEnableDDCPolling no registro como 0. Desativa a verificação automática se o monitor estiver desligado. Agora, se o monitor estiver desconectado e conectado novamente, todas as janelas permanecerão na mesma posição.

Aqui está a resposta que me ajudou: https://superuser.com/questions/120983/how-to-disable-monitor-auto-detection-in-windows-7 (resposta por Alex)

Comunidade
fonte
11
Isso não tem nada a ver com o Mac?
5
Não ... mas a questão também foi marcada como "windows" (embora talvez o OP tenha se referido às janelas do programa ;)). De qualquer forma, no Windows, existem alguns utilitários úteis para a tarefa. Eu pessoalmente uso o ZMover de Basta e funcionou bem. Outra alternativa é o WindowManager da DeskSoft . Mas é claro que isso não ajudará os usuários do OSX.
Ville