summaryrefslogtreecommitdiff
path: root/.local/bin/lemonbar/bspc.py
diff options
context:
space:
mode:
Diffstat (limited to '.local/bin/lemonbar/bspc.py')
-rw-r--r--.local/bin/lemonbar/bspc.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/.local/bin/lemonbar/bspc.py b/.local/bin/lemonbar/bspc.py
new file mode 100644
index 0000000..f2b3cb2
--- /dev/null
+++ b/.local/bin/lemonbar/bspc.py
@@ -0,0 +1,55 @@
+from subprocess import run as _run
+
+
+class Desktop:
+ def __init__(self):
+ self.id = None
+ self.name = None
+ self.focused = False
+ self.occupied = False
+ self.urgent = False
+
+
+def run(command):
+ return _run(command.split(), capture_output=True).stdout.decode().strip()
+
+
+def get_desktops():
+ focused = run("bspc query -D -d .focused")
+ occupied = run("bspc query -D -d .occupied").split("\n")
+ urgent = run("bspc query -D -d .urgent").split("\n")
+
+ desktops = []
+ for desktop_id in run("bspc query -D").split("\n"):
+ desktop = Desktop()
+ desktop.id = desktop_id
+ desktop.name = run(f"bspc query -D -d {desktop.id} --names")
+ desktop.focused = desktop.id == focused
+ desktop.occupied = desktop.id in occupied
+ desktop.urgent = desktop.id in urgent
+
+ desktops.append(desktop)
+
+ return desktops
+
+
+def get_focused_window():
+ return run("bspc query -N -n")
+
+
+def cut_name(name):
+ if len(name) > 70:
+ return name[:65] + "..."
+ else:
+ return name
+
+
+def get_focused_window_name():
+ focused = get_focused_window().lower()
+ for window in run("wmctrl -l").split("\n"):
+ wid, _, _, name = window.split(maxsplit=3)
+ if wid.lower() == focused:
+ return cut_name(name)
+ return ''
+
+