← Otto User GuideExposé & App Switcher

Two ways to find a window: see them all at once (Exposé), or step through applications (App Switcher).

Exposé

Exposé scales every window on the current workspace down into a packed grid, so you can see all of them at once.

Opening and closing

HowEffect
PageUp (Prior)Toggle exposé
Three-finger swipe upOpen, tracking your fingers
Three-finger swipe downClose
Escape, or click empty spaceClose

The gesture is continuous: the windows shrink and spread in step with your fingers, so you can peek at the grid and swipe back down to abandon it. On release, Otto springs open or closed depending on how far you got and how fast you were moving.

Exposé opens on every monitor at once, each showing its own current workspace.

The grid

Windows are packed into a flowing grid that preserves each window’s aspect ratio. Nothing is ever scaled up — a small window stays small rather than being blown up to fill a cell.

Minimized windows are not shown.

Previews are live, not screenshots — a playing video keeps playing in its preview.

Desktop widgets

Widgets that live on the desktop — anything on the layer-shell bottom layer, such as a conky panel or a desktop clock — stay on screen while exposé is open and fade with the rest of the desktop instead of vanishing the moment the gesture starts. They are deliberately left out of the workspace previews in the selector strip, which show the wallpaper alone.

The workspace selector

While exposé is open, a strip of live workspace previews sits above the grid, with a + to add a workspace and an × on hover to remove one. Each monitor gets its own strip showing only its own workspaces. See Workspaces.

Show desktop

A separate mode: PageDown (Next), or a four-finger pinch out, slides all windows off toward the edges of the screen to reveal the wallpaper. Press again, or pinch in, to bring them back.

This is not the same as exposé — the windows move aside rather than scaling into a grid, and there is no selector strip.


App Switcher

A horizontal panel of running applications with icons, names and a blurred backdrop.

Using it

KeysEffect
Ctrl+TabOpen the switcher / move to the next app
Ctrl+Shift+TabMove to the previous app
Ctrl+` (Ctrl+grave)Cycle windows within the highlighted app
Ctrl+QQuit the highlighted app
Release CtrlCommit — focus the highlighted app

The switcher stays up as long as you hold the modifier that opened it. Any of Ctrl, Alt, Logo or Shift works as the hold key, depending on what you bound the action to; release it and the switcher commits and disappears.

Applications are ordered most-recently-used first, so a single Ctrl+Tab press and release flips between the last two apps.

Committing on an app focuses the window of that app you used last. If that window is on another workspace, the screen scrolls there. Ctrl+` steps through all of the app’s windows in turn — across workspaces, in workspace order — so an app with a window on each of two workspaces alternates between them.

Which monitor it appears on

By default the switcher appears on the monitor under the pointer. To pin it to the primary monitor instead:

[appswitcher]
follow_cursor = false

The panel is sized from its host monitor’s own resolution and scale, so it looks right on a screen of a different size. Once it is on screen it stays put — it will not hop to another monitor mid-cycle however far the pointer moves.

It lists windows from every monitor. Selecting one focuses it wherever it lives, which may not be the screen showing the switcher.

Rebinding

[keyboard_shortcuts]
"Alt+Tab"                 = "ApplicationSwitchNext"
"Alt+Shift+ISO_Left_Tab"  = "ApplicationSwitchPrev"
"Alt+grave"               = "ApplicationSwitchNextWindow"
"Alt+F4"                  = "ApplicationSwitchQuit"

Note ISO_Left_Tab for the shifted variant — Shift+Tab produces that keysym, not Tab. See Keyboard Shortcuts.


The Dock as a switcher

The Dock does the same job with the pointer: click a running app’s icon to raise it, click again to cycle through that app’s windows.

Troubleshooting

Exposé previews are frozen or blank. This is a bug worth reporting — grab RUST_LOG=debug output and note whether the window was fullscreen just before.

The switcher opens on the wrong screen. It resolves the monitor from the last confirmed pointer position. If you drive Otto entirely from the keyboard, the pointer may be somewhere you forgot; set follow_cursor = false to pin it.

Ctrl+Q quit my app by accident. That is the shipped binding for ApplicationSwitchQuit and only fires while the switcher is up — but it is easy to hit. Rebind or remove it if it bites.