diff --git a/scripts/ocd-waybar b/scripts/ocd-waybar index cfdebff..8b31a76 100755 --- a/scripts/ocd-waybar +++ b/scripts/ocd-waybar @@ -16,6 +16,7 @@ import json import os import re +import select import signal import socket import subprocess @@ -451,7 +452,17 @@ def main(): d.maybe_tick() d.drain_socket() d.render_and_write() - time.sleep(d.event_deadline()) + # Sleep until the next tick OR a click, whichever is first. + # select on the socket lets a click wake the loop at once instead + # of waiting up to TICK_SECS for the next timer tick. + timeout = d.event_deadline() + if d.sock is not None: + try: + select.select([d.sock], [], [], timeout) + except (OSError, ValueError): + time.sleep(timeout) + else: + time.sleep(timeout) d.stop()