AppleScript: premi Invio ogni X minuti Se il terminale è aperto e l'applicazione è rimasta inattiva per X minuti

3

Sono nuovo di AppleScript e sto tentando di usarlo.

Se utilizzo Terminal e se non ho premuto un tasto per x minuti, voglio che il mio Mac prema il tasto Invio. È ripetere questo processo ogni y minuti. Mi piacerebbe che questo processo continuasse fino a quando non chiudo Terminal o interrompi AppleScript.

Il mio tentativo di programmazione è il seguente:

repeat 52 times
delay 840
tell application "Terminal"
set currentTab to do script ("Return") in front window
end tell
delay 840
end repeat
    
posta Sean 06.03.2014 - 18:35
fonte

4 risposte

1

Perché non aggiustarlo nel terminale?

Suggerirei qualcosa di simile

while true;
  do <whatever your terminal actions is>;
  sleep 60; #sleep 60 seconds
done;

Questo andrà in un ciclo continuo. Quando il programma termina, salta fino a 60 secondi, il che causerà il suo riposo per 60 secondi e poi tornerà alla parte di esecuzione.

Sebbene questo non sia specificamente quello che hai chiesto, questo potrebbe essere un modo più semplice per affrontarlo.

Un po 'più vicino a quello che stai suggerendo:

 for i in {1..52};
   do <your action>;
   sleep 840;
 done
    
risposta data 06.03.2014 - 18:44
fonte
1

Salva come applicazione aperta:

on idle
    if application "Terminal" is running then
        tell application "Terminal" to set currentTab to do script "" in front window
    end if
    return (14 * minutes)
end idle
    
risposta data 07.03.2014 - 15:25
fonte
1

Che problema stai cercando di risolvere?

Ad esempio, questo è un comportamento comune di un client SSH, ed è più facile e meglio risolto con l'aggiunta di ServerAliveInterval 60 alla tua configurazione ssh.

    
risposta data 07.03.2014 - 20:10
fonte
0

Ci sono due parti chiave nel tuo AppleScript, premendo un tasto ed eseguendo un'attività dopo l'inattività.

Pressione di un tasto

Automatizzazione della pressione di un tasto in AppleScript è ben coperto; la risposta accettata alla domanda collegata suggerisce:

tell application "System Events" to key code 36

Esecuzione quando inattivo

La seconda parte, eseguire un'attività quando il tuo Mac è rimasto inattivo è più difficile. Puoi utilizzare software di terze parti per pianificare il tuo AppleScript dopo inattività oppure puoi utilizzare un approccio basato su script per estrarre le informazioni sul tempo di inattività da il sistema:

ioreg -c IOHIDSystem | perl -ane 'if(/Idle/) {$idle=(pop @F)/1000000000; print $idle, "\n"; last;}'

Il riavvolgimento in AppleScript diventa:

set inactive_seconds to do shell script "ioreg -c IOHIDSystem | perl -ane 'if(/Idle/) {$idle=(pop @F)/1000000000; print $idle, \"
\"; last;}'"

Dove inactive_seconds contiene il numero di secondi inattivi.

Metterlo insieme

Metterlo insieme dipende dal tuo approccio ciclico. Prendi in considerazione un ciclo while per verificare se è in esecuzione Terminal.app. L'articolo di John Gruber sarà utile per questo, Come determinare se una determinata app è in esecuzione utilizzando AppleScript e Perl :

tell application "System Events"
    count (every process whose name is "Terminal")
end tell

Il ciclo di maggiore durata potrebbe essere:

tell application "System Events"
    repeat while ((count (every process whose name is "Terminal")) > 0)

        -- check idle time and conditionally perform key press
        -- wait n minutes to avoid excessive polling

    end repeat
end tell
    
risposta data 07.03.2014 - 16:43
fonte

Leggi altre domande sui tag