Skip to content

Scroll

How Otty handles scrollback and the scroll gesture. Everything here is configured in the GUI — no config file needed.

Scroll keys

Page-wise scroll: ⇧PageUp / ⇧PageDown. Top / bottom: ⇧Home / ⇧End. ⌘PageUp / ⌘PageDown jump to the previous / next command when Shell Integration is on. New output (or typing) snaps the viewport back to the bottom.

Scroll behavior

Settings → Controls → Scroll collects how the viewport moves.

Scroll Past Last Line (Disabled by default)

Scroll Past Last Line: Last Line With Content

Lets you keep scrolling after the prompt reaches the bottom, anchoring the last row (or cursor) higher up so it isn't pinned to the very edge. Pick where it stops:

OptionWhere scrolling stops
DisabledClamps at the bottom of the buffer — no overscroll.
Last Line With ContentThe bottom-most row with text (usually the prompt) lands at the viewport top.
Last Line In MiddleThat same content row lands at the vertical middle instead of the top.
Cursor LineThe cursor row lands at the top, even if it sits on a blank line below the prompt.

Disabled on the alternate screen, so full-screen TUIs (vim, htop, less) keep their own bottom edge.

Scroll Past First Line (Disabled by default)

Scroll Past First Line: First Line In Middle

The mirror image at the top of scrollback — push the oldest row down into the viewport instead of clamping at the very first line.

OptionWhere scrolling stops
DisabledClamps at the top of scrollback.
Same as Scroll Past Last LineMirrors whatever Scroll Past Last Line is set to, so you only tune one knob.
First Line With ContentThe topmost row of history lands at the viewport bottom.
First Line In MiddleThe topmost row lands at the vertical middle.

Smooth Scroll (on by default)

Smooth Scroll: Off
Smooth Scroll: On

Scrolls the viewport at pixel granularity instead of snapping a whole row at a time. When the gesture ends the offset snaps back to a row boundary so glyphs stay pixel-aligned. Turn it off for a classic row-by-row jump.

It covers the scrolling the terminal does to itself, too. Press Return at a full screen and the screen slides up into its new position over about a tenth of a second instead of cutting to it in one frame; ls slides its listing in, and a build that keeps printing rolls the screen up steadily rather than a jump per line. Only output that outruns the slide — cat on a long file, anything printing more than a screen between two frames — still jumps: at that rate there is no motion to follow, only blur.

Programs that draw their own interface are left alone: vim, htop, fzf, and agent CLIs like Claude Code redraw the screen in place rather than scrolling it, so sliding the view would make their layout jump instead of glide. Anything reaching a shell through ssh or tmux is treated the same way, since Otty cannot tell those apart from a full-screen program.

Hide the scrollbar while output is streaming (off by default)

By default the scrollbar behaves like any other overlay scrollbar: it appears whenever the view moves, including when the view moves only because a program is printing. On a command that never stops printing — a build log, a tail -f, a test runner — that leaves a bar blinking at the right edge for as long as the command runs, reporting a position you never asked about.

Open Settings → Advanced → All Settings, search for Hide Scrollbar While Following Output, and turn it on. The scrollbar is then tied to you rather than to the output: while output streams and the view follows it there is no scrollbar; scroll up to read something further back and it appears, showing where you are in the history; return to the bottom and it goes away again.

Every way of moving the view counts — wheel, trackpad, the scrollbar itself, ⇧PageUp / ⇧Home, jumping between commands — as does overscrolling with Scroll Past Last Line. Dragging the thumb all the way back down keeps it under your cursor until you let go.

Clearing history

Two commands in the Shell menu throw scrollback away, and they differ in what they keep.

Clear Screen (⌘K) wipes the visible screen and the entire history, then redraws the prompt at the top.

Clear Scrollback Above keeps what you are looking at. Scroll back to the point you care about, run it, and everything older is gone — the rows on screen, and any history below them, stay exactly where they are. At the bottom of the buffer it empties the history but leaves the current screen standing. A brief toast reports how many lines went.

Both are in the command palette as well. Clear Scrollback Above ships without a keyboard shortcut; bind one under Settings → Key Bindings → View if you reach for it often.

On the alternate screen (vim, htop, less) neither erases anything — that display belongs to the program, and the history behind it is left alone.

See also

Otty