Skip to content

The panels

The screen is a left column of Status, Files, Log and Shelf, beside a Main detail view with a Command Log beneath it.

╭─ [1] Status ─────────────────╮╭─ [0] Diff ───────────────────────────────────╮
│Root      /home/alice/work/wc ││changelist: (staged)                          │
│Source    /home/alice/work/wc ││                                              │
│CWD       /home/alice/work/wc ││Loading diff…                                 │
│Branch    trunk               ││                                              │
│Revision  r42                 ││                                              │
│HEAD      r50                 ││                                              │
╰──────────────────────────────╯│                                              │
╭─ [2] ─ Changes ─── Changelist╮│                                              │
│   ▾ /                        ││                                              │
│>    ● A added.txt            ││                                              │
│       M modified.go          ││                                              │
│       D gone.txt             ││                                              │
╰────────────────── 1 of 3 ────╯│                                              │
╭─ [3] Log ────────────────────╮│                                              │
│  Rev    Author Message       ││                                              │
│     r50                      │╰──────────────────────────────────────────────╯
│   * r42                      │╭─ Command Log ────────────────────────────────╮
│                              ││No svn commands run yet.                      │
╰────────────── 1 of 2 · 1 ────╯│                                              │
╭─ [4] Shelf ──────────────────╮│                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · a add · v pick · n changelist · c commit · r revert · d delete · …

Each panel carries its number in the top border — [2] Files — and the focused one is drawn in the accent colour. The Command Log has no number; it is reached with x and the mouse. The frame also carries a position and count in the bottom border (1 of 3) where a count makes sense.

Panel Key What it shows
Status 1 The working-copy root, the source path revision is operating on, the current directory, the branch, and the checked-out revision against HEAD.
Files 2 Pending changes, as a directory tree, grouped by changelist, or as saved patches.
Log 3 Revision history, newest first. An asterisk marks the revision the working copy sits at, and a dot any picked to be compared.
Shelf 4 Change sets set aside with shelving, newest first.
Command Log x The svn actions revision has run on your behalf, newest first, each marked ✓ or ✗.
Main 0 Detail for whatever is selected: a diff for a file or directory, metadata and changed paths for a revision.
  • 1, 2, 3, 4, 0 — focus a panel directly.
  • tab / shift+tab — cycle forwards and backwards through the side panels: Status, Files, Log and Shelf. Main and the Command Log are outside the cycle, so tab pressed on either returns to the side panel driving Main.
  • x — show or hide the Command Log. It has no number of its own, so clicking it is the only way to focus and scroll it.

With allowMouse on, clicking a panel focuses it.

Every panel scrolls on both axes, with scrollbars that show how much is off-screen. With the mouse on, the wheel scrolls whichever panel the pointer rests on, focused or not.

Keys Action
k · j Move the selection up / down
g · G Jump to the top / bottom of a list
K · J Scroll the Main panel up / down a page
h · l Scroll the focused panel one column left / right
Home^ · End$ Jump to the start / end of the line

Six rows, any of which is omitted when it has no value:

Row Meaning
Root The working copy’s root directory. W moves to another one for the session.
Source The directory the views are scoped to — the same as Root when displayFrom is root. P moves it for the session.
CWD The directory revision was started in.
Branch Derived from the repository URL: trunk, branches/<name> or tags/<name>. Blank when the repository does not follow that layout.
Revision The revision the working copy sits at.
HEAD The repository’s latest revision, when it differs from Revision.

Focusing the Status panel puts project links and version information in Main:

╭─ [1] Status ─────────────────────────╮╭─ [0] About ──────────────────────────────────────────────╮
│Root      /home/alice/work/wc         ││             _    _                                       │
│Source    /home/alice/work/wc         ││ _ _ _____ _(_)__(_)___ _ _                               │
│CWD       /home/alice/work/wc         ││| '_/ -_) V / (_-< / _ \ ' \                              │
│Branch    trunk                       ││|_| \___|\_/|_/__/_\___/_||_|                             │
│Revision  r42                         ││                                                          │
│                                      ││Version                                                   │
╰──────────────────────────────────────╯│  dev                                                     │
╭─ [2] ─ Changes ─── Changelists ─── Di╮│                                                          │
│   ▾ /                                ││MIT © Chirag Bapat                                        │
│       M modified.go                  ││                                                          │
│                                      ││Documentation                                             │
│                                      ││  https://bapatchirag.github.io/revision/                 │
│                                      ││                                                          │
│                                      ││Report an issue                                           │
│                                      ││  https://github.com/bapatchirag/revision/issues          │
╰────────────────────────── 1 of 1 ────╯│                                                          │
╭─ [3] Log ────────────────────────────╮│Release notes                                             │
│  Rev Author Message                  ││  https://github.com/bapatchirag/revision/releases        │
│                                      ││                                                          │
│                                      ││Press S to review the active settings and any overrides.  │
│                                      │╰──────────────────────────────────────────────────────────╯
│                                      │╭─ Command Log ────────────────────────────────────────────╮
│                                      ││No svn commands run yet.                                  │
│                                      ││                                                          │
╰──────────────────────────────────────╯│                                                          │
╭─ [4] Shelf ──────────────────────────╮│                                                          │
│                                      ││                                                          │
╰──────────────────────────────────────╯╰──────────────────────────────────────────────────────────╯
/ search · P source path · W repository · ? help                                                    

P moves Source anywhere inside Root for the rest of the session. The prompt opens on the directory revision is reading now and lists what is under it: typing narrows the list, tab steps into it and back, and the parent directory leads it so the list walks up as well as down. The working copy’s root is fixed at the head of the input — it cannot be deleted, and a path above it is refused — so the source never leaves the checkout.

Everything is re-read for the new source — the trees, the history and the cached diffs are dropped and fetched again — so the panels show that subtree and nothing else. The change is never written to the config file; the next launch uses --path again.

P stays inside Root; W leaves it. The prompt lists the working copies it can find in the directory revision was started in, in the checkout it is reading, and in that checkout’s parents a few levels up — so a sibling of your tree is offered as readily as something inside it. They arrive nearest first, typing narrows the list, and tab steps into it and back.

Any checkout the search did not reach is opened by typing its path in full. ~ expands, and a relative path is taken from the current source. The path is checked before anything moves: if it is not a directory, or if svn does not recognise it as a working copy, the switch is refused, the reason is shown, and the prompt reopens on what you typed so it can be corrected.

A switch re-reads everything, exactly as changing the source path does, and it too lasts for the session only.

The Files panel has four views. [ and ] turn between them, and the active one is named in the top border — where all four can be clicked, with the mouse on.

Pending changes as a collapsible directory tree, each change grouped under its folder. enter expands or collapses a directory. Each row is a pick cell, a marker, the SVN status code (A, M, D, ? …) and the file name. A green marks a staged file and a cyan a file in a named changelist; an unstaged file has no marker. A in the leading cell marks a file held for shelving.

A + between the code and the name — A+config.go — marks a path scheduled with history, which is svn status’s own notation for one a copy or a move put there. It takes the space that would have separated the two rather than a column of its own, so marking a row shifts nothing beside it.

SVN records a move as two entries rather than one, and the tree shows both:

Row What it is
A+ at the destination Where the content landed. Main heads it moved from <path>.
D at the source Where it came from. Main heads it moved to <path>.

Only the destination carries a diff. The source’s would be the whole file as removed lines, which reads as the file having been destroyed, so Main shows (no textual diff — the file moved) instead. A move nothing was edited after has nothing to show either way and says (unchanged from <path>); edit the file after moving it and the destination diffs against what was copied, which is the one place that delta appears.

A plain svn copy draws the same + but has no D row to pair with, since nothing was taken away.

state:A+ filters the tree down to these rows. Move detection needs svn 1.9 or newer; an older client omits the attributes and every move reads as an unrelated add and delete.

The footer counts the position and the number of files in view. When a filter, hideUntracked or a hide rule hides some, the full count follows in brackets — 1 of 16 (29).

A row waiting on a revert, a delete or a commit is dimmed and tailed with , and the directories above it carry the count of what is in flight beneath them. Those rows are inert until svn answers — see rows in flight.

A conflicted file (C) is resolved with m, which opens its conflicts side by side.

The same changes bucketed by changelist: named lists first, then (staged), then (unstaged).

╭─ [1] Status ─────────────────╮╭─ [0] Diff ───────────────────────────────────╮
│Root      /home/alice/work/wc ││changelist: (staged)                          │
│Source    /home/alice/work/wc ││                                              │
│CWD       /home/alice/work/wc ││Loading diff…                                 │
│Branch    trunk               ││                                              │
│Revision  r42                 ││                                              │
│                              ││                                              │
╰──────────────────────────────╯│                                              │
╭─ [2] ─ Changes ─── Changelist╮│                                              │
│>  ◆ feature-x (1)            ││                                              │
│   ◆ (staged) (1)             ││                                              │
│   ◆ (unstaged) (1)           ││                                              │
│                              ││                                              │
╰────────────────── 1 of 3 ────╯│                                              │
╭─ [3] Log ────────────────────╮│                                              │
│  Rev Author Message          ││                                              │
│                              │╰──────────────────────────────────────────────╯
│                              │╭─ Command Log ────────────────────────────────╮
│                              ││No svn commands run yet.                      │
╰──────────────────────────────╯│                                              │
╭─ [4] Shelf ──────────────────╮│                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · a add · v pick · n changelist · c commit · r revert · d delete · …

enter drills into a list, which then owns the panel — the border names it and esc goes back.

Patches you have saved with w, newest first, read from diffOutputDir. Selecting one shows it in Main; e opens it in your editor, p applies it to the working copy, and d deletes it from the store.

The rows are files, not working-copy changes: stage and revert do nothing here.

The .rej files left behind by a patch, found by walking the source path recursively and laid out as the same tree as Changes — enter expands and collapses a directory. svn ignores rejects, so this is the only view that shows them. Selecting one shows its contents in Main; m resolves it against the file it was written for, e opens it in your editor and d deletes it from disk. See Finding rejects.

Revision history, newest first, a page at a time. Each row carries the full revision number, the author, and the first line of the message. An asterisk marks where the working copy sits.

Selecting a revision shows its date, full message and changed paths in Main. space updates the working copy to the selected revision.

v picks a revision to compare, up to two at a time, and enter diffs them: the panel becomes a tree of the files they touched and Main follows it like the Changes view. esc comes back out. See Comparing revisions.

A page holds logLimit revisions — 100 by default. n loads the next page and p the previous one. The footer shows where the cursor sits within the page and which page you are on, so 12 of 100 · 3 is the twelfth revision of the third page.

Filtering with / searches the page on screen, not the whole history; the filter stays applied as you turn pages. Drilled into a comparison it narrows the files instead, and the revisions get their own filter back on the way out. Committing returns the panel to the first page, so the new revision is in view.

Change sets taken out of the working copy, newest first, each row naming the entry, how many files it holds and when it was shelved. Selecting one shows its patch in Main.

╭─ [1] Status ─────────────────╮╭─ [0] Shelved diff ───────────────────────────╮
│Root      /home/alice/work/wc ││Index: cmd/main.go                            │
│Source    /home/alice/work/wc ││@@ -1,3 +1,4 @@                               │
│CWD       /home/alice/work/wc ││ func main() {                                │
│Branch    trunk               ││+    setup()                                  │
│Revision  r42                 ││     run()                                    │
│                              ││ }                                            │
╰──────────────────────────────╯│                                              │
╭─ [2] ─ Changes ─── Changelist╮│                                              │
│   ▾ /                        ││                                              │
│       M loose.txt            ││                                              │
│                              ││                                              │
│                              ││                                              │
╰────────────────── 1 of 1 ────╯│                                              │
╭─ [3] Log ────────────────────╮│                                              │
│  Rev Author Message          ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
╭─ [4] Shelf ──────────────────╮╭─ Command Log ────────────────────────────────╮
│> ▣ wip refactor (3 files · 20││No svn commands run yet.                      │
│  ▣ spike (1 file · 2026-08-19││                                              │
│                              ││                                              │
│━━━━━━━━━━━━━━━━━━━━──────────││                                              │
╰────────────────── 1 of 2 ────╯╰──────────────────────────────────────────────╯
enter apply · p pop · d drop · n rename · z shelve · / filter · ? help          

The panel shows only its newest row until it is focused, then grows to its whole list — taking the room from the Log panel above it, so the Files panel never moves. It stays open while you read an entry’s patch in Main, and collapses when another side panel takes over.

enter merges an entry back and keeps it, p merges it back and takes it off the shelf, d drops it and n renames it. z shelves from here as it does from the Files panel.

Every svn command revision ran on your behalf, newest first, each marked ✓ or ✗. Read-only queries — the status and log refreshes that happen constantly, including the background ones — are left out, so the list stays a record of what actually changed.

Toggle the panel with x. It has no number and is not in the tab cycle, so click it to focus and scroll it.

Detail for the current selection, and the target of the search, side-by-side and save-diff actions.

Selection Main shows
A file Its diff, colour-coded.
A directory The combined diff of every change beneath it, when directoryDiff is on.
A changelist The combined diff of its members.
A saved patch The patch file’s contents.
A revision Date, author, full message, and changed paths.
A file in a compared range That file’s section of the range’s diff.
The Status panel Project links and version information.

A diff is fetched once and reused for the rest of the session, so stepping back to a file you have already read costs no svn at all.

revision watches the working copy in the background, so a file saved in your editor, a build, or an svn command run in another terminal reaches the Files panel and the diff on screen within a couple of seconds. The cursor stays on the same file and Main keeps its scroll position — a refresh you did not ask for never moves the screen under you.

Nothing is re-read while a prompt, the commit editor, the settings form, the help menu or the side-by-side overlay owns the screen. The refresh is held and taken once the screen is free, so closing a dialog costs exactly one reload.

L turns the watcher off and on for the session; liveRefresh sets the default. R still re-reads status and history on demand, whether the watcher is running or not.