不活动后终端发出蜂鸣声

不活动后终端发出蜂鸣声

我希望能够为终端窗口(OSX)设置一个不活动计时器 - 所以如果我在 n 分钟内没有输入任何内容,它就会发出“哔声/警报/运行脚本” - 是否有一个我尚未找到的终端命令/命令行可以做到这一点?

答案1

不活动计时器

运行延迟命令很简单:sleep <sleep time>; run_a_command

将其包装在启动/停止计时器函数中:

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
}

您可以添加 shell rc 文件。现在您需要inactivity-start-timer在每次提示和inactivity-stop-timer每次命令执行之前运行。(如果命令执行时间过长,您不希望听到哔哔声,对吧?)此外,这假设您已打开系统铃声,否则请将另一个命令放入INACTIVITY_CMD

猛击

我猜你用的是 bash?如果是的话PROMPT_COMMAND在每个提示符前运行命令。但没有内置任何命令在每次命令执行前运行。有一个已知的技巧可以实现这一点这里.因此也将其添加到您的 .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更简单

autoload -Uz add-zsh-hook
add-zsh-hook precmd inactivity-start-timer
add-zsh-hook preexec inactivity-stop-timer

答案2

不确定这是否正是你想要的,但是GNU 屏幕安静监控,以及tmux做类似的事情監視靜音命令。

答案3

我觉得这是一个有趣的问题。我没有 BSD,所以我在 Linux 上解决了这个问题。BSD 有一个类似 inotify 的东西,叫做 kqueue(2),但我不知道是否有像那个 inotifywait内核设施那样方便的监视工具。

这个想法是监视终端的标准输出,即一个文件。

#!/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

相关内容