Script per alzare una singola finestra in primo piano

8

In uno script sto cercando di trovare la finestra di Terminal.app che contiene uno specifico dispositivo tty e di sollevare quella finestra in alto. Ecco cosa ho finora su Applescript:

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

Dove mi sto bloccando è la parte "alzare la finestra".

Ecco alcune cose che non sono esattamente ciò che voglio:

set frontmost of theWin to true - porta la finestra in primo piano rispetto al gruppo di finestre di Terminal.app ma non la solleva sopra nessun'altra finestra.

tell application "Terminal" to activate - questo porta in primo piano tutte le finestre del Terminale in una grande pila. Voglio solo l'unica finestra.

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

Questo succede quasi, ma quello che fa è alzare la finestra del terminale sulla posizione # 2, ancora sotto la finestra attiva (se l'app attiva è qualcosa di diverso da Terminal.app.)

click theSysWin at {10,50} - sembra non fare nulla.

click first static text of theSysWin - sembra non fare nulla.

C'è un modo per farlo? Non deve essere in Applescript.

EDIT Ho trovato questa pagina web ( link ) citando una chiamata Obj-C / Cocoa:

SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);

Non ho familiarità con ObjC o Cocoa, e questo è (in ultima analisi) invocato da uno script di shell, quindi non sono sicuro di dove andare da lì.

    
posta crowding 04.02.2012 - 01:11
fonte

3 risposte

5

open solleva solo una singola finestra:

do shell script "open -a Terminal"

Un altro modo per aumentare una finestra è impostare il suo indice su 1 e quindi usare 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
    
risposta data 04.02.2012 - 04:29
fonte
3

È possibile fare clic sulle voci di menu delle applicazioni che non sono attive. Usalo per fare clic sulla voce di menu corrispondente alla finestra nel menu Finestra .

Questo è ciò che devi inserire nello 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

Anche se non attiva il programma, la finestra è in primo piano.

    
risposta data 23.03.2012 - 21:37
fonte
2

Mi rendo conto che questa discussione è piuttosto vecchia, ma l'ho incontrata mentre combattevo lo stesso problema e anche altri potrebbero farlo. Per quanto posso dire che non può essere fatto in raw AppleScript. Può comunque essere fatto in AppleScriptObjC. Per usare l'esempio di @Daniel Beck, la nuova versione sarebbe come questa.

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

Il codice aggiunto utilizzerà la classe Cocoa NSWorkspace per "avviare" l'applicazione, che solleva solo la finestra in primo piano dell'applicazione in primo piano con lo stato attivo. Per ulteriori dettagli sul processo che mi ha portato a questo, ho una scrittura più approfondita sul mio sito web qui .

    
risposta data 09.06.2013 - 05:52
fonte

Leggi altre domande sui tag