(Day 16 of 30 Days of Blogging)
One of the only things I miss from when I used xmonad many years ago was being able to hit a keybind to swap the currently focused window with the “master” window. I think the default keybind for that in xmonad is alt-Enter.
i3 doesn’t have the concept of a master window, but if we consider the master window to just be the largest window, the same effect can be achieved:
Simple, but often useful. Here’s the promote-window
script that implements it:
#!/usr/bin/env python3
#
# Promotes the focused window by swapping it with the largest window.
from i3ipc import Connection, Event
def find_biggest_window (container):
max_leaf = None
max_area = 0
for leaf in container.leaves():
rect = leaf.rect
area = rect.width * rect.height
if not leaf.focused and area > max_area:
max_area = area
max_leaf = leaf
return max_leaf
i3 = Connection()
for reply in i3.get_workspaces():
if reply.focused:
workspace = i3.get_tree().find_by_id(reply.ipc_data["id"])
master = find_biggest_window(workspace)
i3.command("swap container with con_id %s" % master.id)
Make sure you have python3 with i3ipc, and then add this your i3 config:
bindsym $mod+p exec --no-startup-id ~/.config/i3/promote-window
No big-brain Haskell required! If you read this far and found this interesting you might also like Hacking i3: Window Swallowing.