Files
komorebi/docs/usage/moving-windows.md
T
LGUG2Z 189aeb1005 feat(wm): more than one monitor
Every monitor has workspaces of its own, which KWin's per-output desktops show
independently, so a second monitor is mostly the window manager's business:
which monitor has the focus, and how a window gets from one to the other.

At the edge of a monitor, focus and move now cross to the monitor on that side,
where they used to fail with "there is no container in this direction": the
focus lands on the container nearest the monitor it came from, and a move swaps
with the container at that edge (cross-monitor-move-behaviour insert puts it in
among the containers there, no-op keeps it). A window that opens or gets the
focus on a monitor that is not the focused one focuses that monitor, which also
makes the scrolling test of a strip next to another monitor guard real code.

The monitor commands come with it: focusing a monitor by index, in order or
under the pointer, a workspace of another monitor, moving and sending the
focused window to another monitor, to a workspace of it or to a named workspace
(in the window manager these are moves between monitors, so they were left out
of the workspace commands), moving and swapping workspaces between monitors, and
a display index preference that keeps a monitor at the index the user gives it.
eager-focus focuses the first window of an executable on any workspace of any
monitor; its window is found in a container or among the floating windows, the
two places a window can be until stacks, monocle and maximize exist.
2026-10-28 07:20:37 -07:00

4.4 KiB

Moving windows

komorebi moves the focused window to another tile of its workspace when it is told to. The window swaps places with the window on that tile, the workspace is tiled again, and the window that moved keeps the focus.

In a direction

komorebic move swaps the focused window with the window whose tile is on one side of it: left, right, up or down. As with komorebic focus, the layout decides which tile is on which side.

komorebic move left
komorebic move down
komorebic move up
komorebic move right

When there is no tile on that side, the window goes to the monitor on that side, if there is one, and takes the place nearest the monitor it came from. What it does there is komorebic cross-monitor-move-behaviour: swap, the default, sends the window it takes the place of back to where it came from; insert puts it in among the windows there; no-op keeps it where it is. komorebic toggle-cross-monitor-move-behaviour switches between insert and swap. With no monitor on that side, nothing moves, and the daemon logs "there is no container or monitor in this direction".

To another monitor

komorebic move-to-monitor takes the focused window to a monitor, by its index, and focuses it there; komorebic send-to-monitor does the same and leaves the focus on the monitor it came from. Their cycle- forms take the next or the previous monitor. komorebic move-to-monitor-workspace and komorebic send-to-monitor-workspace name a workspace of that monitor too, and komorebic move-to-named-workspace and komorebic send-to-named-workspace find it by its name.

komorebic move-to-monitor 1
komorebic send-to-monitor-workspace 1 2

komorebic move-workspace-to-monitor takes the whole workspace in front to another monitor, and komorebic swap-workspaces-with-monitor exchanges the workspaces of the focused monitor with those of another.

In order

komorebic cycle-move swaps the focused window with the next or the previous window in the order of the workspace, and wraps around: next from the last window swaps it with the first.

komorebic cycle-move next
komorebic cycle-move previous

To the largest tile

The first tile of a layout is the largest one: the left half in BSP and the vertical stack, the top half in the horizontal stack, the middle of the ultrawide vertical stack and the right half in the right main vertical stack. In the columns, rows and scrolling layouts it is the first column or row. The grid layout is left alone: these commands do nothing there.

komorebic promote moves the focused window to the first tile, and the windows that were before it each move one tile on. komorebic promote-swap swaps the focused window with the window on the first tile instead, and from the first tile swaps it back with the window it was last swapped with. komorebic promote-window promotes the window on one side of the focused one.

komorebic promote
komorebic promote-swap
komorebic promote-window left

komorebic promote-focus gives the focus to the window on the first tile and moves nothing.

Locking a window in its place

komorebic toggle-lock locks the focused window's container at its place in the order of the workspace, and unlocks it again. Windows that open, close or move around a locked container leave it where it is: a new window that would go in its place goes after it. A window moved onto the place of a locked one with move, cycle-move or promote-swap is locked there instead, since the lock belongs to the place.

komorebic toggle-lock

The LockMonitorWorkspaceContainer and UnlockMonitorWorkspaceContainer messages lock and unlock a container by the index of its monitor, its workspace and itself, for a program such as a status bar. They have no subcommand.

The pointer

The pointer follows the window that moved, unless mouse follows focus is off.