Recuerde los tamaños y la ubicación de las ventanas al desenchufar y volver a enchufar el segundo monitor

Aquí hay algo que apesta:

  1. Conecte el monitor externo a la computadora portátil (Mac OS X Leopard en mi caso).
  2. Organice sus ventanas para tener el IDE en una pantalla y el navegador en otra. (Etc, etc. Cambiar el tamaño, reorganizar, alboroto, alboroto, alboroto.)
  3. Desconecte el monitor para ir a una reunión o lo que sea.
  4. Ir a 1.

Me gustaría reemplazar el paso 2 con "la computadora recuerda exactamente cómo lo tenía y simplemente lo vuelve a poner de esa manera".

(Personalmente, solo necesito una solución para Mac, pero recopilar soluciones para otros sistemas aquí podría ser útil para otros. Estoy seguro de que es un problema común).

Respuestas (13)

Eche un vistazo a Stay by Cordless Dog. Creo que hace exactamente lo que estás buscando.

Intenté esto. No funciona para Windows X11, pero por lo demás parece ser como se anuncia. ¡Gracias por la anotación! Puede ser que esto sea lo más cercano que tenemos a una solución para Mac actualmente.
Las ventanas X11 no son instancias "reales" de NSWindow (al menos no lo eran la última vez que lo revisé), por lo que no es una gran sorpresa que Stay no quiera tener nada que ver con ellas :) ¡Me alegro de que haya funcionado de otra manera!
Esto se ve bien, pero no funciona con aplicaciones de pantalla completa en Lion. Tengo Safari en modo de pantalla completa cuando tengo 1 pantalla y después de adjuntar la 2.ª pantalla, quiero salir de la pantalla completa y mover Safari a la segunda pantalla. Stay no mueve ninguna aplicación de pantalla completa.
Parecía un buen ajuste. Pero con 3 pantallas externas, a menudo tenía problemas con las posiciones y solo resolvió el problema al 50%. Así que todavía tenía que hacer mucho trabajo manual. Lo acabo de desinstalar. ¡Ah, y es solo una prueba de 30 días!

Slate es una aplicación gratuita para Mac muy poderosaque hace exactamente lo que quieres. Cuando conecta su monitor secundario, detecta automáticamente el nuevo monitor , y todas sus ventanas se moverán y cambiarán de tamaño tal como le gusta. Puede definir posiciones y tamaños personalizados para todas sus aplicaciones, incluidas pantalla completa, media pantalla y cuadrícula.

Una de las mejores cosas de Slate es que puede definir diferentes diseños según la cantidad de monitores que haya conectado . Por ejemplo, si está usando su computadora portátil sola, es posible que desee que todas sus aplicaciones llenen toda la pantalla. Pero cuando tiene un monitor secundario más grande, es posible que desee dividir su pantalla entre su navegador, correo y música. Slate hace esto fácilmente.

También puede definir métodos abreviados de teclado para diseños y acciones específicos, como empujar y cambiar el tamaño de las ventanas en un porcentaje determinado.

A continuación se muestra mi archivo de configuración. Mantengo todas mis aplicaciones en pantalla completa en todos mis monitores, pero puedes cambiarlo para que sean de la mitad o de otro tamaño:

# 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

Aquí está la lista de características de la página GitHub de Slate:

  • Altamente personalizable
  • Vincular pulsaciones de teclas a:
    • mover y/o cambiar el tamaño de las ventanas
    • ventanas de enfoque direccional
    • activar diseños preestablecidos
    • crear, eliminar y activar instantáneas del estado actual de las ventanas
  • Establezca diseños predeterminados para diferentes configuraciones de monitor que se activarán cuando se detecte esa configuración.
  • Sugerencias de ventana: una forma intuitiva de cambiar el enfoque de la ventana
  • [Beta] Un conmutador de aplicaciones mejor y más personalizable.

Aquí hay un excelente tutorial sobre cómo aprovechar al máximo Slate.

¿Puede recordar cómo se colocaron las ventanas desde la última vez que se conectaron los monitores externos y simplemente restaurarlos? La aplicación "Stay" casi hace esto, pero sigue sin poder recordar Windows (particularmente Chrome), así que sigo buscando algo mejor.
@dreeves Sí, funciona para mí. Lo hice con éxito manualmente, usando los elementos del menú de Slate "Tomar instantánea" y "Activar instantánea"; si hace clic en ellos antes y después de poner su computadora en suspensión, guardará y restaurará todas las posiciones de sus ventanas. De los documentos , parece que Slate puede hacer "Activar instantánea" automáticamente con su defaultdirectiva . No sé si puede automatizar la parte "Tomar instantánea".
Quiero señalar que para el caso de uso de los OP, simplemente pueden hacer clic en guardar instantánea y restaurar instantánea en el menú. Siempre que solo haya una configuración de ventana que desee, debería funcionar bien sin alterar nada más.
Slate ya no se mantiene, sugieren usar Hammerspoon ahora.

He resuelto esto con un pequeño AppleScript y la pequeña utilidad gratuita Quicksilver.

  1. Guarde este pequeño AppleScript en una ubicación que no cambiará en su computadora:

    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. Deberá personalizar qué aplicaciones desea en su monitor y los límites de la ventana de la forma que desee. Soy programador y la configuración anterior es cómo ejecuto mi segundo monitor.

  3. Instala Quicksilver .

    Elegí que no fuera visible en el Dock y simplemente lo ejecuté como un pequeño demonio de la barra de tareas.

  4. Configure un comando de teclado en Quicksilver y arrastre y suelte su AppleScript del paso 1 en la ventana como la acción a realizar. Lo vinculé a CommandShiftA. ¡Funciona genial!

No es particularmente escalable si tiene una buena cantidad de aplicaciones para administrar. ¡Tampoco es fácil de manejar! Codificar límites realmente no es divertido.
¿Puede configurar el escritorio en el que aparece la aplicación?
El enlace está muerto, encontré una aplicación similar con el mismo nombre aquí .

Pongo esto aquí para la posteridad. Una aplicación muy pequeña que hace exactamente eso y nada más: Memmon (macOS 10.10+).

Esta es POR LEJOS la mejor solución moderna. Gratis y sencillo. Ve a darle al Github algunas estrellas.
Estoy de acuerdo, Memmon es la mejor opción: simplemente funciona, es simple, de código abierto y gratuito.

Acabo de seguir http://cordlessdog.com/stay/ , funciona muy bien para mí, aunque con un poco de retraso

Una vez que haya permanecido instalado en su Mac, puede iniciarlo y almacenar las ventanas como desee. Entonces, cada vez que desconecte sus pantallas y vuelva a conectarse, tendrá todas las ventanas restauradas.

Es posible que deba agregar Stay como su aplicación de inicio, ya que tendrá que iniciarla cada vez que reinicie su Mac.

Lo arreglé sin ninguna aplicación externa.

Todo lo que tiene que hacer es asegurarse de que su computadora portátil sea "Escritorio 1" y su Monitor externo "Escritorio 2"

puede hacer esto moviendo la barra de menú blanca a la pantalla de la computadora portátil en preferencias del sistema> Pantallas> Disposición

Lamentablemente, este ya no parece ser el caso a partir del 10.13 (High Sierra).
Esto funciona muy bien en macOS Monterey v12.1... las etiquetas son un poco diferentes... usar como "Pantalla principal" y "Extendida"... funciona muy bien. ¡Gracias!
Me preguntaba por qué nunca tuve este problema, a lo largo de 10 años de MacBooks/pantallas/OS. Esto lo explica.

Antes de desconectar el monitor, cierre todo lo que no esté completamente en el monitor principal. Las aplicaciones generalmente guardan su estado (incluida la ubicación de la ventana) cuando se cierran y lo leen cuando se abren, por lo que si el segundo monitor está presente en ambos momentos, debería estar bien.

Puede aprovechar las aplicaciones que permiten abrir más de una instancia a la vez, pero solo guardan el estado al cerrar. Cierre la instancia de varios monitores (lo que hace que se guarde el estado). Desconecte el segundo monitor. Si tiene una segunda instancia ejecutándose, debe reubicarse en el monitor principal o puede iniciar otra instancia. No cierre esta instancia antes de volver a enchufar el segundo monitor e iniciar otra instancia (que luego leería la configuración de varios monitores al inicio). Luego puede salir de la instancia de un solo monitor (guardando ese estado) y luego la instancia de varios monitores (sobrescribiendo el estado de un solo monitor).

Una opción más compleja podría incluir averiguar dónde se guarda el estado, hacer una copia de seguridad y escribir un archivo/secuencia de comandos por lotes para restaurarlo antes de abrir la aplicación, lo que le permitiría crear un enlace para hacer esto automáticamente cuando inicie la aplicación. .

Finalmente, puede haber una utilidad de este tipo para su plataforma, o escribir una puede no ser demasiado complejo. Para Windows, hay un programa llamado ShiftWindow que puede cambiar la posición de las ventanas al iniciar la aplicación o en una determinada tecla de acceso directo. Me temo que no conozco MacOS lo suficientemente bien como para decir si existe una utilidad similar. Esta es probablemente la solución ideal, después de que el sistema operativo admita tal cosa directamente.

¡Gracias! ¡No es la respuesta que esperaba, pero es una buena pista!
Esta es la solución más elegante. ¡No es necesario realizar instalaciones ni trastear! ¡Gracias!

En Reddit , algunos usuarios sugirieron Display Maid . Lo estoy usando en MB Air (M1) conectado a la base Display Link con un monitor 4K y un monitor Full HD conectado a través de TB y hasta ahora es excelente.

¿Cómo se compara con Stay ? ¡He estado usando Stay durante algunos años y he estado relativamente feliz, pero siempre interesado en opciones mejoradas!
No tengo experiencia con Stay, pero por lo que vi en el video de demostración, la funcionalidad de Stacy parece muy similar.

Encontré una respuesta en macrumors que funciona para mí sin necesidad de otro software.

Preferences-> General-> DesmarcarClose windows when quitting an app

La descripción de lo que está haciendo esta configuración tiene sentido:

Cuando se selecciona, los documentos abiertos y las ventanas no se restaurarán cuando vuelva a abrir una aplicación

No sé por qué desconectar y conectar una pantalla cuenta como "reabrir una aplicación", pero funcionó para mí.

Al menos en Windows, muchas aplicaciones se restaurarán solas si las maximiza antes de cambiar de monitor. Déjelos solos mientras está en la reunión, luego restáurelos después de volver a conectarse.

Todavía es una solución incompleta (y una molestia), pero es lo único que sé hacer si quiero tener alguna posibilidad de resucitar mis ventanas cuidadosamente colocadas. Aunque ShiftWindow suena intrigante...

Y si pasa de dos monitores a uno, Alt+Barra espaciadora+M, entonces las teclas de flecha son un salvavidas (Windows de nuevo, lo siento) si "pierde" sus ventanas.

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

Encontré esto a través de Lifehacker, y funciona muy bien para mí. Estoy usando la versión pro SizeUp en lugar de la TwoUp gratuita, y es perfecta.

¿Estás diciendo que esto resuelve el problema que planteé? La página a la que se vinculó no parece mencionar nada al respecto.
No, esto no resuelve el problema en absoluto. SizeUp hace que sea más rápido mover una ventana donde lo desee, pero aún debe cambiar manualmente entre cada ventana y decirle a SizeUp dónde desea mover cada una.

Soy usuario de Windows y buscaba cómo desactivar la nueva función de Windows 7 para alejar todas las ventanas del monitor externo desenchufado. Encontré el recibo (para tarjetas de video ATI) para configurar todos los valores DMMEnableDDCPolling en el registro a 0. Deshabilita la verificación automática si el monitor está apagado. Ahora, si el monitor se desenchufa y se vuelve a enchufar, todas las ventanas se mantienen en la misma posición.

Aquí está la respuesta que me ayudó: https://superuser.com/questions/120983/how-to-disable-monitor-auto-detection-in-windows-7 (respuesta de Alex)

¿Esto no tiene nada que ver con Mac?
No ... pero la pregunta también se etiquetó como "ventanas" (aunque tal vez el OP se refirió a las ventanas del programa ;)). De todos modos, para Windows hay un par de utilidades útiles para la tarea. Yo personalmente uso el ZMover de Basta y ha funcionado bien. Otra alternativa es WindowManager de DeskSoft . Pero, por supuesto, esto no ayudará a los usuarios de OSX.

Desenchufe y enchufe los monitores en el mismo orden.

Secuencia de desconexión: Monitor1 -> Monitor2 Secuencia de conexión: Monitor2 -> Monitor1

Parece que la pregunta especifica solo un monitor externo conectado a una computadora portátil. ¿Esta respuesta aborda eso?
Para un solo monitor, no hay ningún problema en mi máquina que ejecuta Mojave.
@Jake3231Creo que el monitor de la computadora portátil se convierte en Monitor1 en este caso. ¡Funcionó para mí!