Script para elevar una ventana al frente

8

En un script, estoy intentando encontrar la ventana Terminal.app que contiene un dispositivo tty específico y elevar esa ventana a la parte superior. Esto es lo que tengo en Applescript hasta ahora:

tell application "System Events"
  set foundWin to false
  if (name of processes) contains "Terminal" then
    tell application "Terminal"
      set theTabs to first tab of every window where tty is "$(tty)"
      repeat with theTab in theTabs
        if class of theTab is tab then
          set theWin to (first window whose tabs contains theTab)
          set selected tab of theWin to theTab
          set foundWin to true
        end if
      end repeat
    end tell
  end if
  if foundWin then
    --RAISE THE WINDOW?!
  end if
end tell

Donde me estoy quedando atascado es la parte "abrir la ventana".

Aquí hay algunas cosas que no son exactamente lo que quiero:

set frontmost of theWin to true : esto lleva la ventana al frente del grupo de ventanas de Terminal.app pero no la levanta por encima de ninguna otra ventana.

tell application "Terminal" to activate - esto trae todas las ventanas de Terminal al frente en una gran pila. Solo quiero una ventana.

tell application "System Events"
    set theSysWin to first window of process "Terminal" whose name is (name of theWin)
    perform action "AXRaise" of theSysWin
end tell

Esto casi lo hace, pero lo que hace es elevar la ventana del terminal a la posición # 2, aún debajo de la ventana activa (si la aplicación activa es algo diferente a Terminal.app.)

click theSysWin at {10,50} - no parece hacer nada.

click first static text of theSysWin - no parece hacer nada.

¿Hay una manera de hacer esto? No tiene que estar en Applescript.

EDITAR Encontré esta página web ( enlace ) citando una llamada Obj-C / Cocoa:

SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);

No estoy familiarizado con ObjC o Cocoa, y esto (en última instancia) se está invocando desde un script de shell, así que no estoy seguro de a dónde ir desde allí.

    
pregunta crowding 04.02.2012 - 01:11

3 respuestas

5

open solo abre una sola ventana:

do shell script "open -a Terminal"

Otra forma de abrir una ventana es establecer su índice en 1 y luego usar AXRaise:

tell application "Terminal"
    set index of window 2 to 1
end tell
tell application "System Events" to tell process "Terminal"
    perform action "AXRaise" of window 1
end tell
    
respondido por el user495470 04.02.2012 - 04:29
3

Puede hacer clic en los elementos del menú de las aplicaciones que no están activas. Úselo para hacer clic en el elemento de menú correspondiente a la ventana en el menú Ventana .

Esto es lo que necesita insertar en su script:

tell application "System Events"
    tell application process "Terminal"
        click menu item (name of theWin) of menu of menu bar item "Window" of menu bar 1
    end tell
end tell

Si bien no activa el programa, la ventana está en primer plano.

    
respondido por el Daniel Beck 23.03.2012 - 21:37
2

Me doy cuenta de que este hilo es bastante antiguo, pero lo encontré luchando contra el mismo problema y otros también pueden hacerlo. Por lo que sé, no se puede hacer en AppleScript en bruto. Se puede hacer en AppleScriptObjC sin embargo. Para usar el ejemplo de @Daniel Beck, la nueva versión sería así.

property NSWorkspace : class "NSWorkspace"
set workspace to NSWorkspace's sharedWorkspace()
tell application "System Events"
    tell application process "Terminal"
        click menu item (name of theWin) of menu of menu bar item "Window" of menu bar 1
        workspace's launchApplication_("Terminal")
    end tell
end tell

El código agregado utilizará la clase de cacao NSWorkspace para "iniciar" la aplicación, que eleva solo la ventana frontal de esa aplicación al frente con enfoque. Para obtener más detalles sobre el proceso que me llevó a esto, tengo una reseña más detallada en mi sitio web here .

    
respondido por el user50881 09.06.2013 - 05:52

Lea otras preguntas en las etiquetas