AppleScript: come aprire un file in TextEdit, senza portare in primo piano le altre finestre di TextEdit?

2

Ho il seguente codice AppleScript che apre un file specifico in TextEdit in una finestra con limiti predeterminati:

set targetFilepath to "/Users/Me/Desktop/My Fruit Log.txt"
tell application "TextEdit"
    activate
    open targetFilepath
    set bounds of front window to {279, 111, 1180, 719}
end tell

Il problema con questo codice è che, se ho altri file TextEdit aperti, il codice porterà anche gli altri documenti in primo piano. Vorrei, tuttavia, che solo questo, uno specifico file di testo sia portato in primo piano.

Il codice non porterà in primo piano una finestra TextEdit ridotta a icona, ma porterà tutte le finestre di TextEdit nascoste, non ridotte a icona in primo piano.

Quando rimuovo la riga activate dal codice:

tell application "TextEdit"
    open targetFilepath
    set bounds of front window to {279, 111, 1180, 719}
end tell

il file viene aperto, ma la sua finestra non viene portata in primo piano.

OS X El Capitan, versione 10.11.6.

Ecco una rappresentazione visiva di ciò che ho descritto sopra. Ho avuto zero finestre ridotte al minimo sul mio computer quando sono state scattate queste schermate.

Ecco come appare il mio schermo prima che venga attivato AppleScript :

Questoèciòchevogliosulmioschermoperappariredopochel'AppleScriptèstatoattivato:

Questoèciòcheilmioschermoattualmenteassomigliaadopol'attivazionediAppleScript:

Nell'interessedellapienadivulgazione,ilmiocodicespostaanchelaposizionedelcursoreTextEditdopoaverapertoilfile.Nonsochequestopotrebbeinfluenzareunapotenzialesoluzione,maquièilcodiceaggiuntivochesegueilpassaggiosopra(xèuninterocheèstatoassegnatoinprecedenza):

tellapplication"TextEdit" to activate
    tell application "System Events" to tell process "TextEdit"
        repeat x times
            key code 125
        end repeat
    end tell
end tell
    
posta rubik's sphere 15.03.2017 - 02:30
fonte

2 risposte

3

Penso che il problema che hai è che hai frainteso ciò che sta realmente accadendo. Lasciami provare a spiegare ...

La prima domanda a cui rispondere è perché le finestre mancanti dal primo screenshot non erano visibili? Ovviamente, il file My Fruit Log.txt non era visibile perché non era 'ancora aperto (cioè il tuo script non era ancora stato eseguito). Ma per quanto riguarda le altre finestre? Ci sono solo tre possibilità:

  1. TextEdit non era in esecuzione (quindi non esistono finestre). Ciò sarebbe ovvio, quindi non è più necessaria alcuna discussione.
  2. TextEdit era in esecuzione, ma era nascosto (quindi tutte le finestre sono nascoste). Questo significa che hai nascosto TextEdit dalla vista. L'esecuzione dello script lo rende nuovamente visibile (insieme a tutte le sue finestre tranne per quelle che potrebbero essere ridotte al minimo).
  3. TextEdit era in esecuzione ma tutte le finestre erano ridotte al minimo. Questo significa che TextEdit è in esecuzione ma nessuna finestra è visibile perché sono state ridimensionate. L'esecuzione del tuo script rende l'app stessa visibile e in primo piano di nuovo, ma tutte le finestre ridotte a icona rimangono ridotte al minimo.

Nel tuo scenario, è quasi certo che si applichi l'Opzione 2. Quindi, anche se non è quello che vuoi sentire, il tuo script sta funzionando come dovrebbe in macOS. Il modo in cui solo posso pensare al momento per ottenere ciò che vuoi in pratica è garantire che il tuo script minimizzi tutte le altre finestre tranne quella appena aperta. Ad esempio, è possibile ottenere ciò con il seguente codice:

set targetFilepath to "/Users/Me/Desktop/My Fruit Log.txt"
tell application "TextEdit"
    activate
    open targetFilepath
    tell (windows whose id is not (get id of front window) and visible is true)
        set miniaturized to true
    end tell
    set bounds of front window to {279, 111, 1180, 719}
end tell

Come puoi vedere, ho appena aggiunto due righe di codice. Penso che siano abbastanza auto-esplicativi: dicono a TextEdit di minimizzare qualsiasi finestra che soddisfi queste due condizioni (1. non è la finestra frontale e 2. è visibile).

Speriamo che questo funzioni per te - ma se no, forse qualcun altro ha una soluzione migliore.

    
risposta data 15.03.2017 - 07:41
fonte
1

Che ne dici di questo?

tell application "TextEdit"

    set fWin to front window -- Since you're already using 'front window'
    repeat with w in every window
        set visible of w to false
    end repeat

    -- set visible of window id 189 to true (frontmost on my mac now)
    set visible of fWin to true
    activate
end tell

Sono sicuro che ci sono altri metodi per identificare le finestre. Puoi anche fare qualcosa di simile ... dove viene usato un elenco di finestre dal secondo all'ultimo.

tell application "TextEdit"
    -- Assuming that front window should be visible…
    set winList to (windows 2 thru -1)
    repeat with w in winList
        set visible of w to false
    end repeat

    activate
end tell

Il termine chiave qui è 'visibile'.

    
risposta data 15.03.2017 - 07:20
fonte

Leggi altre domande sui tag