Script para obtener ventanas más allá del borde de visualización

Tengo un problema con mi nuevo monitor. A menudo, cuando desbloqueo la pantalla, hay ventanas que cuelgan más allá del borde del escritorio. Es bastante irritante tener que arrastrarlos de vuelta al centro de la ventana manualmente.

Afortunadamente, encontré un script que puede hacerlo por mí: https://github.com/bradchoate/gather-windows/blob/master/Gather%20Windows.applescript

Desafortunadamente, solo funciona desde la ventana del editor de scripts. Cuando trato de ejecutarlo haciendo clic en su nombre en la barra de menú del script, no hace nada. Intenté guardarlo como una aplicación y ejecutarlo, con el mismo efecto.

¿Alguien puede ayudarme con eso?

Esta es una gran pregunta. ¡Tengo este problema también! Gracias por compartir el script que encontraste.

Respuestas (2)

Fui a la URL en su pregunta, hice clic en el botón Sin procesar , copié el código y lo pegué en el Editor de secuencias de comandos , donde lo guardé como una aplicación llamada: Gather Off-Screen Windows.app

Luego entré en Preferencias del sistema > Seguridad y privacidad > Accesibilidad , como se muestra en la imagen a continuación, y agregué Gather Off-Screen Windows.app .

Moví algunas ventanas fuera de la pantalla, luego ejecuté Gather Off-Screen Windows.app y se completó sin errores y moví las ventanas fuera de la pantalla completamente a la pantalla.

Insertar imagen 1

Ahora, mientras agregué la aplicación Reunir Windows fuera de la pantalla a Preferencias del sistema > Seguridad y privacidad > Accesibilidad después de haberla guardado, si no lo hubiera hecho, habría esperado ver los siguientes cuadros de diálogo cuando ejecuté la aplicación (que a veces uno o ambos pueden no aparecer):

Insertar imagen 2

Insertar imagen 3

Dicho esto, permítanme decir que si bien no he estudiado el script en profundidad para tener una comprensión completa de su mecánica, sin embargo, veo lo que considero una codificación deficiente en este caso al principio y cambiaría la siguiente línea de código de :

repeat with proc in application processes

A:

repeat with proc in (application processes whose visible is equal to true)

La razón por la que este cambio tiene sentido para mí es, por ejemplo, que en este momento tengo 38 procesos de aplicaciones ejecutándose, de los cuales solo 10 son visibles y, por lo tanto, parece absurdo seguir consultando los 28 procesos de aplicaciones que ni siquiera son visibles.

También tenga en cuenta que incluso minimicé algunas de las ventanas fuera de la pantalla antes de ejecutar la aplicación y cuando las eliminé, estaban completamente en la pantalla. Por lo tanto, la visiblepropiedad en este caso se trata de que el proceso no minimice las ventanas fuera de la pantalla que, mientras están minimizadas, no son visibles.

Gracias por la respuesta y los consejos sobre cómo modificar el script. ¿Tendría alguna sugerencia sobre cómo modificar la secuencia de comandos para que funcione con varios monitores? En este momento, reúne la ventana en varios monitores solo cuando la ventana está fuera de la pantalla en un borde que no está junto a otro monitor.
@autoencoder, como se señaló en mi respuesta, " si bien no he estudiado el script en profundidad para comprender su mecánica ", tendré que estudiar un poco el código para ver si puedo solucionar el problema con varios monitores , aunque solo puedo probar con dos monitores.
¡Eso seria genial! Avísame si se te ocurre algo. Miré el script y obtiene dimensiones para todo el escritorio y verificó que cada ventana esté dentro de esas dimensiones. Sería bueno que el script iterara entre monitores individuales con sus ventanas correspondientes. Desafortunadamente, no tengo experiencia con Apple Script y no sé por dónde empezar.

Usaría Automator para crear un servicio que ejecute Apple Script. Y, como beneficio adicional, también puede usar las Preferencias del sistema para asignar un atajo de teclado al servicio.

A continuación se muestran los pasos necesarios para cada uno.

1. Crea un servicio usando Automator

  1. Inicie Automator (generalmente se encuentra dentro de su carpeta de Aplicaciones)
  2. Vaya a Archivo > Nuevo
  3. Seleccione Servicio y haga clic en Elegir
  4. En la parte superior derecha de la ventana que aparece, asegúrese de que "Sin entrada" esté seleccionado en la lista desplegable El servicio recibe
  5. Asegúrese de que la lista desplegable En muestre "Cualquier aplicación"
  6. En la segunda columna que contiene la lista larga, busque "Ejecutar AppleScript" y haga doble clic en él
  7. Esto agregará la ventana Ejecutar AppleScript a la derecha
  8. Ahora, reemplace (* Su script va aquí *) con el script que desea
  9. Guarde el servicio con un nombre significativo (p. ej., Gather windows).
  10. Salir de Automatizador

Ahora probaría el servicio moviendo un par de ventanas fuera de la pantalla. Puede ejecutar el servicio desde cualquier aplicación yendo a la lista de Servicios dentro de cualquier menú de la aplicación (por ejemplo, Finder > Servicios, Safari > Servicios, TextEdit > Servicios, etc.) y seleccione el servicio que acaba de crear.

Suponiendo que funcione, también puede crear un atajo de teclado para ejecutarlo.

2. Creando tu atajo

  1. Vaya a Preferencias del sistema > Teclado > Accesos directos
  2. Seleccione Servicios en la barra lateral
  3. Encuentra tu servicio (estará en la lista del lado derecho)
  4. Agregue un acceso directo haciendo doble clic en el nombre del servicio
  5. Ahora ve a Preferencias del Sistema > Seguridad y Privacidad > Privacidad
  6. Seleccione Accesibilidad en la barra lateral
  7. Haga clic en el signo + (es posible que deba desbloquear el candado si está bloqueado)
  8. Añadir Automatizador.
  9. Agregue Finder (para encontrar esto, deberá navegar a /System/Library/CoreServices/Finder.app ).
  10. Sal de tus Preferencias del Sistema.

Ahora debería poder usar el atajo de teclado para ejecutar el servicio.

NOTA: Soy consciente de que, para algunos usuarios, los métodos abreviados de teclado no parecen funcionar aunque hayan sido asignados a un servicio. Este es otro tema, pero si esto sucede en su caso, al menos puede ejecutar el servicio desde cualquier aplicación que esté usando.

Déjame saber cómo vas.