40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
from typing import Optional
|
|
|
|
import i3ipc
|
|
|
|
import common
|
|
|
|
|
|
def find_biggest_window(container: i3ipc.Con) -> Optional[i3ipc.Con]:
|
|
return max(container.leaves(),
|
|
key=lambda leaf: leaf.rect.width * leaf.rect.height,
|
|
default=None)
|
|
|
|
|
|
def focus_master(i3: i3ipc.Connection, event: i3ipc.Event) -> None:
|
|
del event
|
|
workspace = common.get_focused_workspace(i3)
|
|
master = find_biggest_window(workspace)
|
|
if not master:
|
|
return
|
|
master.command("focus")
|
|
|
|
|
|
def resize_master(i3: i3ipc.Connection, event: i3ipc.Event, *resize: str) -> None:
|
|
del event
|
|
workspace = common.get_focused_workspace(i3)
|
|
master = find_biggest_window(workspace)
|
|
if not master:
|
|
return
|
|
master.command('resize ' + ' '.join(resize))
|
|
|
|
|
|
def promote_window(i3: i3ipc.Connection, event: i3ipc.Event) -> None:
|
|
del event
|
|
workspace = common.get_focused_workspace(i3)
|
|
focused_window = common.get_focused_window(i3)
|
|
master = find_biggest_window(workspace)
|
|
if not master:
|
|
return
|
|
focused_window.command(f"swap container with con_id {master.id}")
|
|
focused_window.command("focus")
|