web-dev-qa-db-ja.com

Bash / Zsh用のターミナル複数カウントダウンタイマーアプリ

www.timeanddate.com/timer/ にあるものと同様の異なるカウントダウンタイマーで毎日のタスクを整理するアプリを探しています。

私が探している機能は次のとおりです。

  • ターミナルbashまたはzshで実行
  • 複数の独立したカウントダウンタイマー
  • タイマーが切れるとサウンドまたは通知ディスプレイを再生します

タイムトラッキングは重要な機能ではなく、カウントダウンだけで十分です。

ありがとうございました。


enter image description here

4
somethis

端末から「at」コマンドを使用してタイマーを設定します。「at」は、絶対時間と相対時間の両方で使用できるため、非常に柔軟です(詳細:man at):

at now + 1 minute <<<'notify-send ALARM'

「notify-send」はデスクトップに通知を送信します
(通知の代わりに音を出すために「aplay」に自由に置き換えてください)。

3
thom

この問題を自分で解決するために、シェル関数が今日登場しました。私はそれがかなりうまくいくと思います。完全な使用手順はコメントに含まれています。

updated:

ターミナルにカウントダウンタイマーを表示するには、新しい依存関係termdownが必要になりました。

このシェル関数をスクリプトとして使用する場合は、#!/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
  )

}
0
Dreamcat4

ここにbashスクリプトがありますmulti-timer と呼ばれるUbuntuに尋ねます

multi-timer進行状況バーの表示

peek wash cycle.png

特徴

  • 使用間で構成を保持します。
  • 1つのセットで最大19個のタイマーが連続して実行されます。
  • 各タイマーの進行状況バー。
  • タイマーのセットは複数回実行できます。
  • セットの進行状況バー。
  • すべてのセットの進行状況バー。
  • オプションタイマーおよび/またはセットを開始するプロンプト。
  • 各タイマーやセットが終了したときのオプションのポップアップメッセージ。
  • 各タイマーおよび/またはセットが終了したときのオプションのアラーム。
  • 各タイマーOR set ORすべてのセットが終了したときのオプションのロック画面。
  • Systrayがカウントダウンを表示するためのSysmonitorインジケーターへのオプションのインターフェース。
  • タイマーのすべてのセットが終了すると、オプションのクローズプログレスバーが表示されます。

スクリーンショットとbashコードについては、上記のリンクをご覧ください。

0

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ウィンドウを設定していました。

0
crocket