Scrolling
Windows form columns on an endless strip, and the screen is a window onto it.
The third placement mode, alongside snapping and tiling, modeled on the niri compositor. Opening a window never resizes the ones you already have. The strip slides them aside and scrolls the view instead, so the window you were reading keeps the width you gave it no matter how many others you open beside it.
Scrolling is assigned per screen, per virtual desktop, and per activity from the Monitors page, so a widescreen can scroll while the laptop panel tiles. Meta+Shift+T cycles the focused screen through whichever modes you have enabled.
The model
Each window opens into a column. A column is as tall as the work area and as wide as you make it, and the columns sit side by side on a strip that has no end. The screen shows whichever stretch of that strip the focused column is in. Focus a column that is off to the right and the view slides right to bring it in.
A column can hold more than one window. Its windows either share it, splitting its height between them, or the column goes tabbed and shows one at a time with a compact indicator alongside listing the rest. Move a window between columns with the consume and expel verbs: consuming pulls the neighbouring window into your column, expelling pushes the focused one out into a column of its own.
Column widths come from a small set of presets the cycling shortcut steps through, or you can size a column freely and it keeps whatever width you gave it. A window too large for the strip floats instead, using the same floating support the other modes use, and a window you minimize returns to the slot it left rather than to the end of the strip.
Strip direction
A strip is not always side to side. On a screen running top to bottom the columns become full-width rows stacked down the screen, and every verb, shortcut, and animation keeps its meaning along the new axis — parking, tabs, the drop indicator, and the strip shaders all turn with it.
Match the screen shape is the default: a monitor taller than it is wide runs top to bottom without being asked, so a portrait side panel switches over on its own while the main screen stays side to side. Side to side and Top to bottom pin the axis instead. The setting lives under Settings → Scrolling → Window, its monitor scope chip sets a different direction per monitor, and a Set strip direction rule action layers over both.
Templates
A template is to a scrolling screen what a layout is to a snapping one and an algorithm is to a tiling one. It describes the columns the first windows form, the width later columns open at, and the width and height presets the cycling shortcuts step through. Three ship bundled; edit one and your copy is stored beside it, and deleting the copy brings the built-in back.
Assign a template per screen from the layout picker, the Monitors page dropdown, the quick layout digits, or the layout cycle shortcuts, following the same per-screen, per-desktop, per-activity scoping the other modes use. A screen can also run no template at all, in which case it walks the width and height steps configured under Settings → Scrolling → Columns.
Applying a template mainly shapes the columns that open afterwards. Columns you already have keep the widths you gave them, except a column sized from a width preset, which reflows to the nearest width the new template offers.
Shortcuts
The scrolling vocabulary lives on Meta+Alt. Every binding below is a default and every one is rebindable in System Settings → Shortcuts → PlasmaZones.
Moving along the strip
| Binding | Action |
|---|---|
| Meta+wheel | Focus the next / previous column and slide the strip Horizontal wheel ticks and two-finger horizontal touchpad scrolls work too. Switchable, and invertible, under Settings → Scrolling → Window. |
| Meta+Alt+Home / End | Focus the first / last column on the strip |
| Meta+Alt+Shift+Home / End | Move the focused column to the start / end of the strip |
| Meta+Alt+V | Focus the first window in the column |
| Meta+Alt+Shift+V | Focus the last window in the column |
| Meta+Alt+Y / Shift+Y | Page the view back / forward along the strip |
| Meta+Alt+C | Center the focused column |
| Meta+Alt+Shift+C | Center all visible columns |
Sizing columns
| Binding | Action |
|---|---|
| Meta+Alt+PgUp / PgDown | Cycle the column through the template's width presets, forward / back |
| Meta+Alt+W / Shift+W | Widen / narrow the column freely |
| Meta+Alt+F | Maximize the column to the full strip width |
| Meta+Alt+E | Expand the column to fill the free space |
| Meta+Alt+Shift+E | Shrink the column to its minimum width |
| Meta+Ctrl+Shift+T | Equalize the widths of all columns |
| Meta+Alt+Shift+F | Toggle windowed fullscreen for the focused window |
Windows within a column
| Binding | Action |
|---|---|
| Meta+Alt+I | Consume the next window into this column |
| Meta+Alt+Shift+I | Expel the focused window into its own column |
| Meta+Alt+U / O | Consume or expel toward the start / end of the strip One key each way: it consumes the neighbour when there is one to take, and expels the focused window when there isn't. |
| Meta+Alt+T | Toggle the column between sharing and tabbing its windows |
| Meta+Alt+H / Shift+H | Grow / shrink the window's share of the column |
| Meta+Alt+Shift+PgUp / PgDown | Cycle the window height through the template's height presets |
| Meta+Ctrl+Alt+T | Reset every window height in the column |
Four directional variants ship unbound: a stop-at-the-edge and a wrapping pair for focusing the previous and next column. The generic focus chords already walk columns and cross to the next monitor at the strip's edge, so these exist for users who want niri's exact edge behaviour. Bind them under Shortcuts.Scrolling in ~/.config/plasmazones/config.json — an unbound entry never registers with KGlobalAccel, so it does not appear in the system Shortcuts page until it has a sequence.
Next
- Full shortcut reference → Scrolling in the context of every other binding PlasmaZones ships.
- phosphor-scroll-engine → The library behind the mode: the strip, column widths, the stash, and the axis abstraction.
- Scrolling over D-Bus → Inspect and drive the strip from a script on
org.plasmazones. - Bundled template sources on GitHub → The three templates above, as the JSON the daemon loads.