multi-timer进度条显示

multi-timer进度条显示

我正在寻找一个应用程序来组织我的日常任务,在不同的倒数计时器中,类似于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进度条显示

预览洗涤周期.png

特征

  • 在使用之间保留配置。
  • 每组最多有 19 个计时器按顺序运行。
  • 每个计时器的进度条。
  • 一组计时器可以运行多次。
  • 设置的进度条。
  • 所有集合的进度条。
  • 可选提示启动每个计时器和/或设置。
  • 每个计时器和/或集合结束时可选弹出消息。
  • 每个计时器和/或集合结束时可选警报。
  • 每个计时器或设置或所有设置结束时可选锁定屏幕。
  • Sysmonitor Indicator 的可选接口,以便 Systray 显示倒计时。
  • 当所有计时器组结束时,可选择关闭进度条显示。

访问上面的链接获取屏幕截图和 bash 代码。

答案4

今天我想出了一个 shell 函数来解决我自己的这个问题。我确实认为它工作得相当好。完整的使用说明包含在评论中。

更新:

现在需要一个新的依赖项,termdown用于在终端中显示倒计时器。

如果您想将此 shell 函数用作脚本,则只需将其复制粘贴到新文件中,并将#!/bin/shshebang 作为第 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
  )

}

相关内容