我正在寻找一个应用程序来组织我的日常任务,在不同的倒数计时器中,类似于www.timeanddate.com/timer/
我所寻找的功能包括:
- 在终端 bash 或 zsh 中运行
- 多个独立倒计时器
- 计时器用完后播放声音或显示通知
请注意,时间跟踪并不是一个重要功能,仅倒计时就足够了。
谢谢。
答案1
从终端使用“at”命令设置你的计时器,“at”非常灵活,因为它可以用于绝对时间和相对时间(更多信息:)man at
:
at now + 1 minute <<<'notify-send ALARM'
“notify-send” 将在您的桌面上放置一个通知
(您可以随意用“aplay”替换它以发出声音而不是通知)。
答案2
您可以将 tmux 或 screen 与 termdown 结合使用。
Termdown 是一个 ncurses 计时器。
http://www.slashgeek.net/2016/10/25/termdown-cli-countdown-timer-stopwatch/展示 termdown 如何工作。
tmux 和 screen 允许你同时运行多个倒计时。
我会写一些这样的脚本
~/.bin/pomodoro:
#!/bin/sh
termdown 25:00 && mplayer /path/to/sound.mp3
~/.bin/5minbreak:
#!/bin/sh
termdown 05:00 && mplayer /path/to/break.mp3
而且,我将在 tmux 或屏幕窗口中执行pomodoro
。这样,我可以创建多个倒计时。
您想要通知吗?您也可以将通知命令与 termdown 结合使用。
我已提前为特定计时器设置了多个 tmux 窗口。
答案3
这里有一个 bash 脚本询问 Ubuntu称为多定时器
multi-timer
进度条显示
特征
- 在使用之间保留配置。
- 每组最多有 19 个计时器按顺序运行。
- 每个计时器的进度条。
- 一组计时器可以运行多次。
- 设置的进度条。
- 所有集合的进度条。
- 可选提示启动每个计时器和/或设置。
- 每个计时器和/或集合结束时可选弹出消息。
- 每个计时器和/或集合结束时可选警报。
- 每个计时器或设置或所有设置结束时可选锁定屏幕。
- Sysmonitor Indicator 的可选接口,以便 Systray 显示倒计时。
- 当所有计时器组结束时,可选择关闭进度条显示。
访问上面的链接获取屏幕截图和 bash 代码。
答案4
今天我想出了一个 shell 函数来解决我自己的这个问题。我确实认为它工作得相当好。完整的使用说明包含在评论中。
更新:
现在需要一个新的依赖项,termdown
用于在终端中显示倒计时器。
如果您想将此 shell 函数用作脚本,则只需将其复制粘贴到新文件中,并将#!/bin/sh
shebang 作为第 1 行。然后在文件末尾调用该函数将timer "$@"
所有 cmdline 参数传递给它。
希望这可以解决之前提出的批评。
timer() {
# tested on ubuntu 18.04
# installation: copy-paste this shell function into your ~/.bashrc or ~/.profile
# program dependencies
# to install missing dependancies on ubuntu
# # sudo apt-get install -y xcowsay
# # sudo snap install -y termdown
# this shell function also uses `paplay` (for making a beep / ding sound)
# and `pgrep` for checking when any xcowsay window was clicked on and dismissed
# (however on ubuntu desktop 18.04, both `paplay` and `pgrep` are already installed by default)
# usage examples
# input string is parsed by the unux date command. tested with "date (GNU coreutils) 8.28"
# ... this version of date seems able to understand and translate these human-readable strings
# timer "1h1m30s"
# timer "1h 1m 30s"
# timer "1 minute 30 seconds"
# timer "15 minutes"
# timer "2 hours 30 minutes"
# timer "00:45:00" # = "45 minutes"
# timer "00:00:45" # = "45 seconds"
# timer "1:1:1" # = 1 hour, 1 minute and 1 second
# begin
_time="$1"
_bell_repeat_delay="3"
# convert input string to seconds, and sleep until time is up
# _seconds="$(local epoch=$(date --utc -d @0 +%F); date --utc -d "$epoch $time" +%s.%09N)"
if echo "$_time" | grep -q -E '^[0-9]+$'; then
_seconds="$_time"
else
_date_flag="$(echo "$_time" | sed -e "s/s/SECONDS/g" -e "s/m/MINUTES/g" -e "s/h/HOURS/g")"
_seconds="$(date -d "1970-01-01 00:00:00 UTC ${_date_flag}" "+%s")"
fi
_critical="$(echo $_seconds / 10 | bc)"
if [ $_seconds -lt 60 ]; then
_critical=20
elif [ $_seconds -lt 100 ]; then
_critical=30
elif [ $_seconds -lt 200 ]; then
_critical=40
elif [ $_seconds -lt 300 ]; then
_critical=60
fi
# sleep _seconds && \
termdown --critical $_critical --voice en $_seconds && \
(
# handle ctrl+c gracefully
trap "killall -q xcowsay; exit 1" INT
# display notifications on all monitors, 1 notification per monitor
i=0; num_monitors="$(xrandr -q| grep " connected" | wc -l)"
while [ "$i" -lt "$num_monitors" ]; do
# this cmd displays the notification itself, and is further customizable
xcowsay --monitor=$i --time=0 --cow-size=large "$time is up" &
i="$(expr $i + 1)"
done
_sound_file_timer_expired="/usr/share/sounds/gnome/default/alerts/drip.ogg"
_sound_file_remind_repeat="/usr/share/sounds/freedesktop/stereo/complete.oga"
audacious --pause
# play -v15 "$_sound_file_timer_expired"
paplay "$_sound_file_timer_expired"
while true; do
# detect if any notifications were dismissed, then exit gracefully
num_cows="$(pgrep -c xcowsay)"
[ "$(expr $num_monitors - $num_cows)" -gt 0 ] && break
# make a slowly repeating ding or beep audible alert sound
paplay "$_sound_file_remind_repeat"
sleep $_bell_repeat_delay || break
done
# dismiss all of the notifications, when displayed on multiple monitors
killall -q xcowsay
trap - INT
)
}