Come posso attivare successivamente un AppleScript molto rapidamente?

3

Sfondo

Per la regolazione del volume fine uso il seguente AppleScript:

try
    do shell script "killall afplay"
end try
set currentVolume to output volume of (get volume settings)
set volume output volume (currentVolume + 2)
    -- play volume changing sound at new volume
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"

Ciò aumenterà il volume del 2% e riprodurrà il nuovo volume una volta come al solito.

Problema

L'utilizzo di questo script presenta degli svantaggi:

  • Quando faccio scattare lo script rapidamente più volte di seguito, non risponde con la stessa rapidità del cambiamento di volume "normale".
  • Ad ogni esecuzione il suono del volume viene riprodotto a tutta lunghezza.

Sembra che il mio problema sia dovuto a una limitazione del modo in cui gli script vengono attivati . Per esempio. Quando uso FastScript, non eseguirà di nuovo lo script prima è stato completato. Lo stesso vale per Quicksilver.

Tuttavia, quando assegno lo "script di volume inferiore" a Quicksilver e lo "script di volume più strong" a FastScripts I può attivare entrambi gli script molto velocemente uno dopo l'altro - quindi: lo script va bene. Credo che il mio problema sia dovuto al modo in cui gli script vengono attivati.

Domanda

Come posso attivare uno script in modo rapido?

    
posta gentmatt 02.03.2012 - 18:03
fonte

2 risposte

2

L'aggiunta di > /dev/null 2>&1 & alla fine del comando do shell script dovrebbe funzionare. Questo reindirizza stdout e stderr del comando do shell script a /dev/null ed esegue lo script della shell in background, il che significa che AppleScript non deve più attendere il comando per restituire stdout o stderr prima lo script AppleScript può finire. Ciò significa che termina e può essere eseguito di nuovo molto più rapidamente.

Inoltre, non dovresti aver bisogno del gestore try all'inizio. Il seguente script modificato dovrebbe funzionare:

set currentVolume to output volume of (get volume settings)
set volume output volume (currentVolume + 2)
-- play volume changing sound at new volume
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff > /dev/null 2>&1 &" 

Ho ricevuto questo suggerimento da MacScripter (un'ottima risorsa per AppleScripting) in un post sull'esecuzione di più istanze di uno script di shell.

    
risposta data 02.03.2012 - 22:12
fonte
1

Che ne dici di aggiungere una e commerciale alla fine della riga afplay in modo che la parte con script venga riprodotta in background? In questo modo

afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff &
    
risposta data 02.03.2012 - 19:59
fonte

Leggi altre domande sui tag