Bip terminal após inatividade

1

Eu gostaria de poder definir um temporizador de inatividade para uma janela de terminal (OSX) - então, se eu não tivesse digitado nada por n minutos, ele daria um 'bipe / alerta / script de execução' - existe como ainda-unfound-by-me-terminal comando / comando-line-fu que faz isso?

    
por Joe 19.07.2013 / 16:54

3 respostas

2

Temporizador de inatividade

A execução de um comando atrasado é simples: sleep <sleep time>; run_a_command

Envolvendo isso nas funções do cronômetro de início / fim:

INACTIVITY_TIME='5m'
INACTIVITY_CMD='echo -ne \a'
function inactivity-start-timer () {
    (sleep "$INACTIVITY_TIME"; $INACTIVITY_CMD) &
    INACTIVITY_PID=$!
    disown
}

function inactivity-stop-timer () {
    kill $INACTIVITY_PID > /dev/null 2>&1
}

Você pode adicionar o seu arquivo shell rc. Agora você precisa executar inactivity-start-timer antes de cada prompt e inactivity-stop-timer antes de cada execução do comando. (Você não quer um bip se o comando demorar muito, não é?) Isso também pressupõe que você tenha o sistema ligado, caso contrário, coloque outro comando em INACTIVITY_CMD .

Bash

Eu estou supondo que você use bash? Nesse caso, há PROMPT_COMMAND para executar um comando antes de cada solicitação. Mas nada embutido para executar antes de cada execução de comando. Existe um truque conhecido para obter esse aqui . Então adicione isso também ao seu .bashrc:

PROMPT_COMMAND=inactivity-start-timer

preexec () {
    inactivity-stop-timer
}

preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
 local this_command='history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"';
 preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG

Zsh

Se você usar o zsh, por outro lado, o mais simples :

autoload -Uz add-zsh-hook
add-zsh-hook precmd inactivity-start-timer
add-zsh-hook preexec inactivity-stop-timer
    
por 19.07.2013 / 19:30
1

Não tenho certeza se é exatamente isso que você está procurando, mas a tela GNU tem silence monitoramento e tmux faz algo semelhante com o comando monitor-silence .

    
por 19.07.2013 / 19:31
1

Eu pensei que isso era uma coisa interessante para descobrir. Eu não tenho BSD, então resolvi o problema no Linux. Há algo como inotify para o BSD, chamado kqueue (2), mas eu não sei se existem ferramentas de monitor convenientes como inotifywait para essa fascinação do kernel.

A idéia é monitorar a saída padrão de um terminal que é um arquivo.

#!/bin/bash
myterm=/dev/'ps -o tty= | head -n1'
if [ $# -eq 0 ] && [ -r $myterm ] && [ ! -d $myterm ]; then
    terminal=$myterm
else
    terminal=${1:-/dev/pts/1}
fi

function time_out {
    echo timeout
    loop=false
}

loop=true
timeout=4

while $loop; do
    inotifywait $terminal -qq -t $timeout -e MODIFY || time_out
done
    
por 19.07.2013 / 23:34