Window management
Built-in plugins tile the focused window with the keyboard, snap a window when you drag it to a screen edge, place it on a grid, switch windows with Option-Tab, and save and restore whole layouts.
Every plugin on this page needs Accessibility. The Window Switcher and Gesture Examples also need Input Monitoring. See Permissions.
Tiling hotkeys
The Window Controls plugin binds these hotkeys. Change any of them in Settings → Plugins → Window Controls.
| Hotkey | Action |
|---|---|
| ⌃⌥← | Left half |
| ⌃⌥→ | Right half |
| ⌃⌥↑ | Top half |
| ⌃⌥↓ | Bottom half |
| ⌃⌥Return | Fill the screen |
| ⌃⌥C | Center, at 75% of the screen |
| ⌃⌥U ⌃⌥I ⌃⌥J ⌃⌥K | Top left, top right, bottom left, bottom right quarter |
| ⌃⌥D ⌃⌥E ⌃⌥F | First, center, and last third |
| ⌃⌥T ⌃⌥Y | First and last two thirds |
| ⌃⌥⌘→ ⌃⌥⌘← | Move to the next or previous display, filling it |
| ⌃⌥Space | Radial menu: a wheel at the pointer. Click a wedge to tile there. |
Press a hotkey again to cycle. A second ⌃⌥← moves the window to the right half, and the thirds keys step through all three thirds. Turn on Cycle through displays to move to the next display at the end of a cycle.
The launcher has Tile Left Half, Tile Right Half, Tile Full Screen, and Radial Menu as commands.
Drag to snap
Drag a window by its title bar to a screen edge or corner. Macotron shows where the window will go, and tiles it when you let go. With the default Halves zones:
- Left or right edge: that half of the screen.
- Top edge: fill the screen.
- Bottom edge: the bottom half.
- A corner: that quarter.
Hold Shift while you drag to use the alternate zones, which are Thirds by default. Run Toggle Window Snap from the launcher to turn snapping off or on.
Window Controls settings
| Setting | Default | What it does |
|---|---|---|
| Snap edge (px) | 20 | How close to an edge the pointer must be to snap. |
| Snap corner (px) | 80 | How large each corner zone is. |
| Gap (px) | 0 | Space between a tiled window and the screen edge or its neighbor, 0 to 40. |
| Snap zones | Halves | Halves, Thirds, or Quarters. |
| Alternate snap key | Shift | The key that switches to the alternate zones. None turns it off. |
| Alternate snap zones | Thirds | Zones used while the alternate key is held. |
| Cycle through displays | Off | Move on to the next display when a tiling cycle ends. |
Switch windows
The Window Switcher plugin flips through windows, not apps. Hold Option and press Tab. A panel lists the open windows with the previous one selected. Press Tab again to move down, Shift-Tab to move up, and release Option to switch. You can also click a row.
Window Controls adds Switch Window to the launcher. It opens a panel of every window with a filter field. Click a window to bring it forward.
Place on a grid
The Window Quick Grid plugin opens a small panel with a grid that stands for the screen. Press ⌃⌥G or run Place Window, then drag across the cells you want the window to cover. Macotron shows the destination while you drag. The grid is 6 by 6 by default; set Columns, Rows, and Gap in its settings, or change the counts in the panel. A grid can have up to 20 columns and 20 rows.
Save and restore layouts
The Window Layout Save & Restore plugin keeps one layout named Work.
- Save Work records the app, title, frame, and display of every window.
- Restore Work moves the windows back. A toast reports how many it restored and how many it could not find.
The layout is saved in the plugin's localStorage, so it survives restarts. To keep more layouts, copy the plugin and change its key, or ask your coding agent to add more.
Trackpad gestures
The Gesture Examples plugin tiles the focused window when you swipe with three fingers: left for the left half, right for the right half.
Spaces
The Spaces Controls plugin adds Next Space, which switches to the next Mission Control desktop. It shows a toast with the desktop number each time the space changes.
Write your own
All of these plugins use macotron.window. A tile is a fraction of the screen:
macotron.keyboard.on("Left Two Thirds", "ctrl+opt+shift+left", () => {
const win = macotron.window.focused();
if (win) macotron.window.moveToFraction(win.id, { x: 0, y: 0, w: 2 / 3, h: 1, gap: 8 });
});