From 980e83baf09953efb57b613448fa7f8660ef6973 Mon Sep 17 00:00:00 2001 From: hmj6502 Date: Fri, 19 Dec 2025 10:08:37 +0000 Subject: add stopwatch functionality lots of code duplication... next step is to get rid of that --- timers.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'timers.py') diff --git a/timers.py b/timers.py index 0141222..ee04e86 100644 --- a/timers.py +++ b/timers.py @@ -2,13 +2,15 @@ import datetime import sys, termios, tty import inputs +frequency = 120 # 120Hz refresh + 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 + timeout = 1/frequency old_settings = termios.tcgetattr(sys.stdin) tty.setcbreak(sys.stdin.fileno()) @@ -22,11 +24,38 @@ def countdown(length): 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) + +def stopwatch(): + """stopwatch timer; returns time elapsed""" + start = datetime.datetime.now() + accum = 0 + timeout = 1/frequency + + old_settings = termios.tcgetattr(sys.stdin) + tty.setcbreak(sys.stdin.fileno()) + while True: + elapsed = datetime.datetime.now() - start + + ch = inputs.getch_nb(timeout) + if ch == 'q': + break + + # see https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797 + print("\x1b[2K\r" + inputs.delta_to_HM(elapsed), end="", flush=True) + + accum += timeout + if accum >= 1: + accum = 0 + termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings) + + return (elapsed, start) -- cgit v1.2.3