summaryrefslogtreecommitdiff
path: root/.local/bin/lemonbar/bspc.py
blob: f6814855bd0c8f03535e765163a1403b8b07fde0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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 cut_name(name):
    if len(name) > 70:
        return name[:65] + "..."
    else:
        return name


def get_focused_window_name():
    focused = run("bspc query -N -n")
    if len(focused) == 0:
        return ''
    else:
        focused = focused.lower()

    for window in run("wmctrl -l").split("\n"):
        wid, _, _, name = window.split(maxsplit=3)
        if wid.lower() == focused:
            return cut_name(name)
    return ''