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. |
Moving between panels
Section titled “Moving between panels”- 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.
Moving inside a panel
Section titled “Moving inside a panel”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 |
Status
Section titled “Status”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
Changing the source path
Section titled “Changing the source path”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.
Switching repositories
Section titled “Switching repositories”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.
Changes
Section titled “Changes”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.
Copies and moves
Section titled “Copies and moves”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.
Changelists
Section titled “Changelists”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.
Rejects
Section titled “Rejects”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.
Command Log
Section titled “Command Log”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.
Keeping up with the working copy
Section titled “Keeping up with the working copy”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.