diff options
Diffstat (limited to 'timers.py')
| -rw-r--r-- | timers.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/timers.py b/timers.py new file mode 100644 index 0000000..0141222 --- /dev/null +++ b/timers.py @@ -0,0 +1,32 @@ +import datetime +import sys, termios, tty +import inputs + +def countdown(length): + """countdown timer; length in seconds. returns start and time left (>0 if quit early)""" + time_left = length + start = datetime.datetime.now() + end = start + datetime.timedelta(seconds=time_left) # change to mins in final + accum = 0 + timeout = 1/120 # 120Hz refresh + + old_settings = termios.tcgetattr(sys.stdin) + tty.setcbreak(sys.stdin.fileno()) + while True: + now = datetime.datetime.now() + time_left = end - now + if time_left.total_seconds() <= 0: + break + + ch = inputs.getch_nb(timeout) + if ch == 'q': + print("\nexited early!") + break + # see https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797 + print("\x1b[2K\r" + inputs.delta_to_HM(time_left), end="", flush=True) + accum += timeout + if accum >= 1: + accum = 0 + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings) + + return (time_left, start) |
