Skip to content

The panels

The screen is a left column of Status, Files and Log, 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                       │╭─ [4] Command Log ────────────────────────────╮
│  * r42                       ││No svn commands run yet.                      │
│                              ││                                              │
│                              ││                                              │
│                              ││                                              │
╰────────────── 1 of 2 · 1 ────╯╰──────────────────────────────────────────────╯
space stage · n changelist · c commit · r revert · d delete · [ ] view · ? help 

Each panel carries its number in the top border — [2] Files — and the focused one is drawn in the accent colour. 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.
Command Log 4 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.
  • 14, 0 — focus a panel directly.
  • tab / shift+tab — cycle forwards and backwards.
  • x — show or hide the Command Log.

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                         ││                                                          │
│                                      ││MIT © Chirag Bapat                                        │
╰──────────────────────────────────────╯│                                                          │
╭─ [2] ─ Changes ─── Changelists ─── Di╮│Documentation                                             │
│  ▾ /                                 ││  https://bapatchirag.github.io/revision/                 │
│      M modified.go                   ││                                                          │
│                                      ││Report an issue                                           │
│                                      ││  https://github.com/bapatchirag/revision/issues          │
│                                      ││                                                          │
│                                      ││Release notes                                             │
│                                      ││  https://github.com/bapatchirag/revision/releases        │
│                                      ││                                                          │
╰────────────────────────── 1 of 1 ────╯│Press S to review the active settings and any overrides.  │
╭─ [3] Log ────────────────────────────╮│                                                          │
│  Rev Author Message                  ││                                                          │
│                                      ││                                                          │
│                                      │╰──────────────────────────────────────────────────────────╯
│                                      │╭─ [4] Command Log ────────────────────────────────────────╮
│                                      ││No svn commands run yet.                                  │
│                                      ││                                                          │
│                                      ││                                                          │
│                                      ││                                                          │
│                                      ││                                                          │
╰──────────────────────────────────────╯╰──────────────────────────────────────────────────────────╯
/ 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 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.

The footer counts the position and the number of files in view. When a filter or hideUntracked 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          │╰──────────────────────────────────────────────╯
│                              │╭─ [4] Command Log ────────────────────────────╮
│                              ││No svn commands run yet.                      │
│                              ││                                              │
│                              ││                                              │
│                              ││                                              │
╰──────────────────────────────╯╰──────────────────────────────────────────────╯
space stage · n changelist · c commit · r revert · d delete · [ ] view · ? help 

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.

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. Committing returns the panel to the first page, so the new revision is in view.

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.

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.
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.