aboutsummaryrefslogtreecommitdiffstats
path: root/xpybar/config/adjbacklight
diff options
context:
space:
mode:
Diffstat (limited to 'xpybar/config/adjbacklight')
-rw-r--r--xpybar/config/adjbacklight90
1 files changed, 90 insertions, 0 deletions
diff --git a/xpybar/config/adjbacklight b/xpybar/config/adjbacklight
new file mode 100644
index 0000000..a480262
--- /dev/null
+++ b/xpybar/config/adjbacklight
@@ -0,0 +1,90 @@
+# -*- python -*-
+import os
+import sys
+import time
+
+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
+
+r, w = os.pipe()
+pid = os.fork()
+if not pid:
+ os.dup2(r, 0)
+ os.close(w)
+ os.execlp('adjbacklight', 'adjbacklight')
+ sys.exit(1)
+os.close(r)
+
+def get_backlight():
+ r, w = os.pipe()
+ pid = os.fork()
+ if not pid:
+ os.dup2(w, 1)
+ os.execlp('adjbacklight', 'adjbacklight', '-g')
+ sys.exit(1)
+ os.close(w)
+ ret = b''
+ while True:
+ bs = os.read(r, 512)
+ if not bs:
+ break
+ ret += bs
+ os.close(r)
+ os.waitpid(pid, 0)
+ ret = float(ret.decode('utf-8', 'replace').rstrip('%\n')) / 100
+ return ret
+
+def set_backlight():
+ if 0 <= backlight <= 1:
+ os.write(w, b'%f%%\n' % (backlight * 100))
+ time.sleep(0.0001)
+
+backlight = get_backlight()
+
+def redraw():
+ x = int(bar.width * backlight + 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 backlight
+ if isinstance(e, Xlib.protocol.event.ButtonPress):
+ button, x = e.detail, e.event_x
+ if button == LEFT_BUTTON:
+ backlight = min(max(0, x / bar.width), 1)
+ set_backlight()
+ bar.invalidate()
+ elif button == SCROLL_UP:
+ backlight = min(backlight + 0.05, 1)
+ set_backlight()
+ bar.invalidate()
+ elif button == SCROLL_DOWN:
+ backlight = max(backlight - 0.05, 0)
+ set_backlight()
+ bar.invalidate()
+ elif button in (MIDDLE_BUTTON, RIGHT_BUTTON, FORWARD_BUTTON, BACKWARD_BUTTON):
+ os.close(w)
+ os.waitpid(pid, 0)
+ raise KeyboardInterrupt()
+ elif isinstance(e, Xlib.protocol.event.MotionNotify):
+ if e.detail == 0:
+ backlight = min(max(0, e.event_x / bar.width), 1)
+ set_backlight()
+ bar.invalidate()