コマンドラインで使えるラーメンタイマー(Noodle Timer for macOS command line.)
今日ふとPCのそばにあったラーメンを食べようと準備をしている時に,コマンドラインを使って,
for i in `seq 180`
do
sleep 1
echo $i
done
で時間を測ったのですが,,,
コマンド一つで時間を測れたらいいのにな~と思いまして,
ノリでNoodle-Timerなるものを作ってみました。
(そんな本格的なものではありません...)
動作環境
- macOS Catalina 10.15.6
- You can use bash or zsh
- shellscript
ソースコード
# !/bin/zsh
clear
trap 'date' 2
sh -c "/bin/echo -n \"How many minutes? 🍜 : \""
read Sec
echo =================================
echo "Set ${Sec} minutes."
view=$((Sec*60))
echo =================================
afplay /System/Library/Sounds/Hero.aiff
sh -c "/bin/echo -n \"start time -> \""
date "+%Y-%m-%d %H:%M:%S"
echo =================================
icon=("ー" "\" "|" "/" "ー" "\" "|" "/")
count=0
for i in `seq $view`
do
sleep 1
ESC=$(printf '\033')
echo "${ESC}[m ${ESC}[35m${icon[$count]}${ESC}[m ${ESC}[36m$((view-i)) seconds left...${ESC}[m ${ESC}[35m${icon[$count]}${ESC}[m" |
while read line; do
printf '\r%*s\r' ${lenLine:-${#line}}
printf "%s" "$line"
lenLine=${#line}
done
if [ $count = 7 ]; then
count=0
else
count=$((count + 1))
fi
done
echo ""
echo =================================
sh -c "/bin/echo -n \"complete time -> \""
date "+%Y-%m-%d %H:%M:%S"
echo =================================
osascript -e "display notification \"$Sec min.\" with title \"🍜 complete.\""
for i in `seq 6`
do
afplay /System/Library/Sounds/Purr.aiff
done
ちょっとだけ解説
まずclearコマンドで画面をクリア.
それから、readコマンドで入力受付
時間を入力し,
変数に格納する.
秒に変換後,
afplay /System/Library/Sounds/Hero.aiff
でサウンドを鳴らす.
開始時の日付時刻を出力する.
カウント中はtopコマンド風に表示させたいので,コマンド実行の際パイプで入力を受付,
その後前回の行を消して再配置します.
終了時の日付時刻を出力する.
最後に通知のポップアップを出し,サウンドを6回ほど鳴らし,完了です.
trapを仕掛け,Control + Cで時刻を表示できるので,お湯を入れたタイミングとずれた場合開始時刻から逆算できると思います.
trap 'date' 2
また時間がある際もうちょっと作り込んでいきたいと思います.
(いい息抜きになりました...笑)
MITです.自由に触って大丈夫です.
https://github.com/Iovesophy/Noodle-Timer
こんな機能があればいいのにとか,私だったらこうするなどありましたら,コメントくださいませ.