41 lines
1.1 KiB
Python
41 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")
|