diff options
Diffstat (limited to 'i3blocks/.local/bin/i3blocks-title')
-rwxr-xr-x | i3blocks/.local/bin/i3blocks-title | 49 |
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() |