(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.