aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/i3blocks/.local/bin/i3blocks-title
diff options
context:
space:
mode:
Diffstat (limited to 'i3blocks/.local/bin/i3blocks-title')
-rwxr-xr-xi3blocks/.local/bin/i3blocks-title49
1 files changed, 49 insertions, 0 deletions
diff --git a/i3blocks/.local/bin/i3blocks-title b/i3blocks/.local/bin/i3blocks-title
new file mode 100755
index 0000000..b8e3213
--- /dev/null
+++ b/i3blocks/.local/bin/i3blocks-title
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import os
+from typing import Union
+
+import i3ipc
+from i3ipc import Event
+from i3ipc.events import WindowEvent, WorkspaceEvent
+
+
+class Connection(i3ipc.Connection):
+ def handle(
+ self,
+ *events: Union[Event, str],
+ ):
+ def wrapped(handler):
+ for event in events:
+ self.on(event, handler)
+ return handler
+
+ return wrapped
+
+
+max_length = int(os.environ.get("max_length", 30))
+
+
+sway = Connection()
+
+
+@sway.handle(
+ Event.WINDOW_FOCUS,
+ Event.WINDOW_TITLE,
+ Event.WINDOW_NEW,
+ Event.WINDOW_CLOSE,
+ Event.WORKSPACE_FOCUS,
+)
+def on_window_event(sway: i3ipc.Connection, event: WindowEvent | WorkspaceEvent):
+ focused = sway.get_tree()
+ while focused is not None and focused.ipc_data["type"] != "con":
+ focused = focused.find_focused()
+
+ if focused:
+ print(focused.ipc_data["name"][:max_length])
+ else:
+ print("")
+
+
+if __name__ == "__main__":
+ sway.main()