howtophil icon

Pomodoro Timer (Bash/Terminal)

howtophil | PRO | 07/03/18 11:21:00 AM UTC | 0 ⭐ | 1135 👁️ | Never ⏰ | []
Bash |

1.68 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
 
#------------------------------------------------
#
# A simple Pomodoro method timer in bash
# Uses espeak to announce Work/Break/Long-Break
#
# ./pomodoro.sh
#
# Hope you ejoy,
#    Phillip J Rhoades
#
#------------------------------------------------
 
#Times
workminutes=25 #working pomodoro minutes
shortbreak=5 #short break minutes
longbreak=15 #long break minutes
pommax=4 #Work pomodoros before long break
 
#Initializing
pomcount=0
thebreak=0
sbreaker=0
 
#Sounds
sbsound="/usr/share/sounds/purple/receive.wav"
lbsound="/usr/share/sounds/speech-dispatcher/test.wav"
wksound="/usr/share/xdx/sounds/attention.wav"
 
###
 
tput civis #hide the cursor
 
#Bring the cursor back after ctrl-c
trap ctrl_c INT
function ctrl_c() {
        tput cvvis
    exit
}
 
#Loop those pomodoros
while [ 1 ]; do
    if [ $sbreaker -eq 1 ] && [ $pomcount -ne $pommax  ]; then
        let "sbreaker=0"
        dominutes=$shortbreak
        theword="SHORT BREAK:"
        thesound="$sbsound"
    else 
        if [ $pomcount -eq $pommax ]; then
            let "pomcount=0"
            dominutes=$longbreak
            theword="LONG BREAK:"
            thesound="$lbsound"
            let "sbreaker=0"
        else
            let "pomcount+=1"
            dominutes=$workminutes
            theword="WORK $pomcount:"
            thesound="$wksound"
            let "sbreaker=1"
        fi
    fi
 
    #echo "$pomcount | $thebreak | $dominutes"
    
    secs=$(($dominutes * 60))
    echo $theword |espeak &>/dev/null
    while [ $secs -gt 0 ]; do
        #echo -ne "$theword $secs\033[0K\r"
        theminutes=$(printf "%02d" $((m=(${secs}%3600)/60)))
        theseconds=$(printf "%02d" $((s=${secs}%60)))
        echo -ne "$theword $theminutes:$theseconds\033[0K\r"
        sleep 1
        : $((secs--))
    done
    #play "$thesound" &>/dev/null
done

Comments