From 3e21f6d13c0a70db95fec8b5a71b758223ff4293 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sat, 26 Jun 2021 13:18:37 +0200 Subject: Add xpybar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- xpybar/config/adjbrilliance | 94 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 xpybar/config/adjbrilliance (limited to 'xpybar/config/adjbrilliance') diff --git a/xpybar/config/adjbrilliance b/xpybar/config/adjbrilliance new file mode 100644 index 0000000..0ffb09d --- /dev/null +++ b/xpybar/config/adjbrilliance @@ -0,0 +1,94 @@ +# -*- python -*- +import os +import sys +import time +import signal + +OUTPUT, HEIGHT, YPOS, TOP = 0, 2 * 12, 0, True + +LEFT_BUTTON = 1 +MIDDLE_BUTTON = 2 +RIGHT_BUTTON = 3 +SCROLL_UP = 4 +SCROLL_DOWN = 5 +SCROLL_LEFT = 6 +SCROLL_RIGHT = 7 +FORWARD_BUTTON = 8 +BACKWARD_BUTTON = 9 + +path = os.getenv('XDG_RUNTIME_DIR', '/tmp') + '/.xpybar.brilliance' +pid = None +pending = False + +def sigchld(*_): + global pid, pending + if pid is not None: + r, _ = os.waitpid(-1, 0) + if r == pid: + pid = None + if pending: + pending = False + set_brilliance() + else: + with open(path, 'wb') as file: + return file.write(('%f' % brilliance).encode('utf-8')) + +def get_brilliance(): + try: + with open(path, 'rb') as file: + return float(file.read().decode('utf-8', 'strict')) + except: + return 1 + +def set_brilliance(): + global pid, pending + if pid is None: + pid = os.fork() + if not pid: + if brilliance == 1: + os.execlp('cg-brilliance', 'cg-brilliance', '-x') + else: + os.execlp('cg-brilliance', 'cg-brilliance', '--', '%f' % brilliance) + sys.exit(1) + else: + pending = True + +signal.signal(signal.SIGCHLD, sigchld) +brilliance = get_brilliance() + +def redraw(): + x = int(bar.width * brilliance + 0.5) + bar.change_colour(bar.foreground) + bar.window.fill_rectangle(bar.gc, 0, 0, x, HEIGHT) + bar.change_colour(bar.background) + bar.window.fill_rectangle(bar.gc, x, 0, bar.width - x, HEIGHT) + +import x as _x +_get_event_mask = _x.get_event_mask +def get_event_mask(): + return _get_event_mask() | Xlib.X.ButtonMotionMask +_x.get_event_mask = get_event_mask + +def unhandled_event(e): + global brilliance + if isinstance(e, Xlib.protocol.event.ButtonPress): + button, x = e.detail, e.event_x + if button == LEFT_BUTTON: + brilliance = min(max(0, x / bar.width), 1) + set_brilliance() + bar.invalidate() + elif button == SCROLL_UP: + brilliance = min(brilliance + 0.05, 1) + set_brilliance() + bar.invalidate() + elif button == SCROLL_DOWN: + brilliance = max(brilliance - 0.05, 0) + set_brilliance() + bar.invalidate() + elif button in (MIDDLE_BUTTON, RIGHT_BUTTON, FORWARD_BUTTON, BACKWARD_BUTTON): + raise KeyboardInterrupt() + elif isinstance(e, Xlib.protocol.event.MotionNotify): + if e.detail == 0: + brilliance = min(max(0, e.event_x / bar.width), 1) + set_brilliance() + bar.invalidate() -- cgit v1.2.3-70-g09d2