detached 49b5efc

docs(readme): refresh usage and feature overview

commit
49b5efc3440d8698f26ee76379a181e23d45ae14
author
brice · · 2026-07-04 16:55 UTC
parent
71edbd4
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +71 -22
M README.md +71 -22
@@ -1,9 +1,9 @@
1-# vev
1+# vev — Norwegian: web, weave, tissue
22
3-There is many terminal multiplexers but this one is mine. Written in Go, with no runtime dependencies beyond `golang.org/x/sys` and `golang.org/x/term`. Purely focused on performance, rendering of high output of vertical text, agentic coding and remote work over ssh.
3+There are many terminal multiplexers, but this one is mine. Written in Go, with no runtime dependencies beyond `golang.org/x/sys` and `golang.org/x/term`. Purely focused on performance, rendering high-output vertical text, agentic coding, and remote work over SSH.
44
5-> [!IMPORTANT]
6-> This is totally in alpha
5+> [!IMPORTANT]
6+> This is totally in alpha.
77
88 ## Install
99
@@ -11,70 +11,109 @@ There is many terminal multiplexers but this one is mine. Written in Go, with no
1111 go install github.com/bnema/vev@latest
1212 ```
1313
14-Or from a checkout: `go build -o vev .`
14+From a checkout:
15+
16+```sh
17+make install # go install .
18+go build -o vev . # local binary
19+```
1520
1621 ## Usage
1722
18-```
23+```text
1924 vev attach to (or create) an ephemeral session
2025 vev new <name> create and attach to a named session
2126 vev attach <name> attach to an existing named session (alias: a)
2227 vev attach user@host[:session] attach to a remote vev daemon over SSH
23-vev ls list sessions
28+vev ls list sessions (alias: list)
2429 vev kill <name> kill a named session
30+vev kill -- <name> kill a name that starts with -
2531 vev kill --all kill all sessions and stop the daemon
2632 vev kill --daemon stop the active vev daemon
27-vev --help show help
28-vev --version show version
33+vev --help show help (aliases: -h, help)
34+vev --version show version (alias: version)
2935 ```
3036
31-Ephemeral sessions get a number (0, 1, 2...) and die when you detach. Named sessions survive detach and live until killed or their last tab closes. The daemon starts on first use and exits when no sessions remain.
37+Ephemeral sessions get a number (`0`, `1`, `2`, ...) and die when you detach. Named sessions survive detach and can be resumed later. The daemon starts on first use and exits when no sessions remain.
38+
39+Only one client is attached to a session at a time; attaching again displaces the old client.
3240
33-Remote attach runs `ssh user@host vev _stdio ...` under the hood, so vev must be installed on the remote host and reachable via your normal SSH config. Each remote attach opens one ssh connection. To make reconnects near-instant, enable OpenSSH connection reuse for your hosts in `~/.ssh/config`:
41+## Remote attach
3442
43+```sh
44+vev attach user@host
45+vev attach user@host:session
3546 ```
47+
48+Remote attach runs `ssh user@host vev _stdio ...` under the hood, so `vev` must be installed on the remote host and reachable through your normal SSH config. Omitting `:session` opens an ephemeral remote session.
49+
50+For faster reconnects, enable OpenSSH connection reuse:
51+
52+```sshconfig
3653 Host *
3754 ControlMaster auto
3855 ControlPath ~/.ssh/cm-%r@%h:%p
3956 ControlPersist 10m
4057 ```
4158
42-Omitting `:session` opens an ephemeral session on the remote.
43-
4459 ## Keys
4560
46-All bindings use the Alt modifier directly, no prefix key.
61+All bindings use Alt directly; there is no prefix key.
4762
4863 | Key | Action |
4964 |---|---|
5065 | Alt+Space | open the command palette |
5166 | Alt+1 .. Alt+9 | switch to tab by number |
67+| Alt+h/j/k/l | focus pane left/down/up/right |
68+| Alt+Arrow | focus pane by direction |
69+| Alt+a | jump to a session with attention |
5270
5371 Some terminals encode Alt+Space as a non-breaking space instead of `ESC Space`; in those terminals, the palette binding depends on whether the terminal can send `ESC Space` for Alt+Space.
5472
5573 ## Command palette
5674
57-Open the palette with Alt+Space, then type a command code or fuzzy-match its label. Use Up/Down or Ctrl-N/Ctrl-P to move through matches, Enter to run the selected command, and Esc to close the palette.
75+Open the palette with Alt+Space. Type a command code or fuzzy-match the label/description. Use Up/Down or Ctrl-N/Ctrl-P to move, Enter to run, and Esc/Ctrl-C to close.
5876
59-The status bar marks ephemeral sessions with `*`, for example `0*`. Ephemeral sessions are removed when their client detaches. Renaming an ephemeral session makes it a persistent named session and removes the marker.
77+Successful commands are promoted near the top the next time the palette opens.
6078
6179 | Code | Action |
6280 |---|---|
6381 | CNT | create new tab |
6482 | CNS | create and switch to a named session |
6583 | CLT | close current tab |
66-| NXT | switch to next tab |
67-| PVT | switch to previous tab |
68-| SSP | switch session or tab |
84+| SPR / SPL / SPU / SPD | split pane right / left / up / down |
85+| STP | stack a new pane |
86+| TST | toggle focused stack |
87+| CLP | close focused pane |
88+| FPL / FPR / FPU / FPD | focus pane left / right / up / down |
89+| NXT / PVT | switch to next / previous tab |
90+| SSP | open session picker |
6991 | VIS | enter visual mode |
7092 | RNS | rename session |
7193 | DET | detach |
7294
73-Rename prompts are prefilled with the current session name. Type text, use Backspace to edit, Enter to submit, or Esc/Ctrl-C to cancel. Empty names and names already used by another session are rejected; the prompt stays open and shows the validation error.
95+Rename prompts are prefilled with the current session name. Empty names and names already used by another session are rejected.
7496
75-## Visual mode
97+## Session picker
7698
77-Visual mode freezes a view over history while the program keeps running underneath. Enter it with the `VIS` palette command or by scrolling up with the mouse wheel. The status bar shows `[VISUAL]`; when a line selection is active, selected rows are highlighted, the status bar shows `[SELECT]`, and a visible line cursor marks the active row.
99+Open it with `SSP` in the palette. It lists sessions and tabs, previews the selected target when space allows, and marks stopped sessions.
100+
101+| Key | Action |
102+|---|---|
103+| j / k, Up / Down | move selection |
104+| Enter | switch to or resume selected target |
105+| x | kill/delete selected target |
106+| q, Esc, Ctrl-C | close picker |
107+
108+## Panes and tabs
109+
110+Tabs hold pane layouts. Panes can be split left/right/up/down, stacked, focused by direction, and closed from the command palette. Clicking a pane focuses it.
111+
112+The top bar shows numbered tabs. The bottom bar shows the session name; ephemeral sessions are marked with `*`, for example `0*`.
113+
114+## Visual mode and copy
115+
116+Visual mode freezes a view over history while the program keeps running underneath. Enter it with the `VIS` palette command or by scrolling up with the mouse wheel.
78117
79118 | Key | Action |
80119 |---|---|
@@ -84,3 +123,13 @@ Visual mode freezes a view over history while the program keeps running undernea
84123 | v or Space | toggle line selection |
85124 | y or Enter | copy selection and exit |
86125 | q, Esc, Ctrl-C | exit without copying |
126+
127+Copy uses OSC 52 clipboard sequences when supported by your terminal.
128+
129+## Development
130+
131+```sh
132+make test # go test ./... -race
133+make lint # goimports check, then go vet ./...
134+make mocks # regenerate mocks
135+```
@@ -1,9 +1,9 @@
1-# vev1+# vev — Norwegian: web, weave, tissue
2 2
3-There is many terminal multiplexers but this one is mine. Written in Go, with no runtime dependencies beyond `golang.org/x/sys` and `golang.org/x/term`. Purely focused on performance, rendering of high output of vertical text, agentic coding and remote work over ssh. 3+There are many terminal multiplexers, but this one is mine. Written in Go, with no runtime dependencies beyond `golang.org/x/sys` and `golang.org/x/term`. Purely focused on performance, rendering high-output vertical text, agentic coding, and remote work over SSH.
4 4
5-> [!IMPORTANT] 5+> [!IMPORTANT]
6-> This is totally in alpha 6+> This is totally in alpha.
7 7
8 ## Install8 ## Install
9 9
@@ -11,70 +11,109 @@ There is many terminal multiplexers but this one is mine. Written in Go, with no
11 go install github.com/bnema/vev@latest11 go install github.com/bnema/vev@latest
12 ```12 ```
13 13
14-Or from a checkout: `go build -o vev .`14+From a checkout:
15+
16+```sh
17+make install # go install .
18+go build -o vev . # local binary
19+```
15 20
16 ## Usage21 ## Usage
17 22
18-```23+```text
19 vev attach to (or create) an ephemeral session24 vev attach to (or create) an ephemeral session
20 vev new <name> create and attach to a named session25 vev new <name> create and attach to a named session
21 vev attach <name> attach to an existing named session (alias: a)26 vev attach <name> attach to an existing named session (alias: a)
22 vev attach user@host[:session] attach to a remote vev daemon over SSH27 vev attach user@host[:session] attach to a remote vev daemon over SSH
23-vev ls list sessions28+vev ls list sessions (alias: list)
24 vev kill <name> kill a named session29 vev kill <name> kill a named session
30+vev kill -- <name> kill a name that starts with -
25 vev kill --all kill all sessions and stop the daemon31 vev kill --all kill all sessions and stop the daemon
26 vev kill --daemon stop the active vev daemon32 vev kill --daemon stop the active vev daemon
27-vev --help show help33+vev --help show help (aliases: -h, help)
28-vev --version show version34+vev --version show version (alias: version)
29 ```35 ```
30 36
31-Ephemeral sessions get a number (0, 1, 2...) and die when you detach. Named sessions survive detach and live until killed or their last tab closes. The daemon starts on first use and exits when no sessions remain.37+Ephemeral sessions get a number (`0`, `1`, `2`, ...) and die when you detach. Named sessions survive detach and can be resumed later. The daemon starts on first use and exits when no sessions remain.
38+
39+Only one client is attached to a session at a time; attaching again displaces the old client.
32 40
33-Remote attach runs `ssh user@host vev _stdio ...` under the hood, so vev must be installed on the remote host and reachable via your normal SSH config. Each remote attach opens one ssh connection. To make reconnects near-instant, enable OpenSSH connection reuse for your hosts in `~/.ssh/config`:41+## Remote attach
34 42
43+```sh
44+vev attach user@host
45+vev attach user@host:session
35 ```46 ```
47+
48+Remote attach runs `ssh user@host vev _stdio ...` under the hood, so `vev` must be installed on the remote host and reachable through your normal SSH config. Omitting `:session` opens an ephemeral remote session.
49+
50+For faster reconnects, enable OpenSSH connection reuse:
51+
52+```sshconfig
36 Host *53 Host *
37 ControlMaster auto54 ControlMaster auto
38 ControlPath ~/.ssh/cm-%r@%h:%p55 ControlPath ~/.ssh/cm-%r@%h:%p
39 ControlPersist 10m56 ControlPersist 10m
40 ```57 ```
41 58
42-Omitting `:session` opens an ephemeral session on the remote.
43-
44 ## Keys59 ## Keys
45 60
46-All bindings use the Alt modifier directly, no prefix key.61+All bindings use Alt directly; there is no prefix key.
47 62
48 | Key | Action |63 | Key | Action |
49 |---|---|64 |---|---|
50 | Alt+Space | open the command palette |65 | Alt+Space | open the command palette |
51 | Alt+1 .. Alt+9 | switch to tab by number |66 | Alt+1 .. Alt+9 | switch to tab by number |
67+| Alt+h/j/k/l | focus pane left/down/up/right |
68+| Alt+Arrow | focus pane by direction |
69+| Alt+a | jump to a session with attention |
52 70
53 Some terminals encode Alt+Space as a non-breaking space instead of `ESC Space`; in those terminals, the palette binding depends on whether the terminal can send `ESC Space` for Alt+Space.71 Some terminals encode Alt+Space as a non-breaking space instead of `ESC Space`; in those terminals, the palette binding depends on whether the terminal can send `ESC Space` for Alt+Space.
54 72
55 ## Command palette73 ## Command palette
56 74
57-Open the palette with Alt+Space, then type a command code or fuzzy-match its label. Use Up/Down or Ctrl-N/Ctrl-P to move through matches, Enter to run the selected command, and Esc to close the palette.75+Open the palette with Alt+Space. Type a command code or fuzzy-match the label/description. Use Up/Down or Ctrl-N/Ctrl-P to move, Enter to run, and Esc/Ctrl-C to close.
58 76
59-The status bar marks ephemeral sessions with `*`, for example `0*`. Ephemeral sessions are removed when their client detaches. Renaming an ephemeral session makes it a persistent named session and removes the marker.77+Successful commands are promoted near the top the next time the palette opens.
60 78
61 | Code | Action |79 | Code | Action |
62 |---|---|80 |---|---|
63 | CNT | create new tab |81 | CNT | create new tab |
64 | CNS | create and switch to a named session |82 | CNS | create and switch to a named session |
65 | CLT | close current tab |83 | CLT | close current tab |
66-| NXT | switch to next tab |84+| SPR / SPL / SPU / SPD | split pane right / left / up / down |
67-| PVT | switch to previous tab |85+| STP | stack a new pane |
68-| SSP | switch session or tab |86+| TST | toggle focused stack |
87+| CLP | close focused pane |
88+| FPL / FPR / FPU / FPD | focus pane left / right / up / down |
89+| NXT / PVT | switch to next / previous tab |
90+| SSP | open session picker |
69 | VIS | enter visual mode |91 | VIS | enter visual mode |
70 | RNS | rename session |92 | RNS | rename session |
71 | DET | detach |93 | DET | detach |
72 94
73-Rename prompts are prefilled with the current session name. Type text, use Backspace to edit, Enter to submit, or Esc/Ctrl-C to cancel. Empty names and names already used by another session are rejected; the prompt stays open and shows the validation error.95+Rename prompts are prefilled with the current session name. Empty names and names already used by another session are rejected.
74 96
75-## Visual mode97+## Session picker
76 98
77-Visual mode freezes a view over history while the program keeps running underneath. Enter it with the `VIS` palette command or by scrolling up with the mouse wheel. The status bar shows `[VISUAL]`; when a line selection is active, selected rows are highlighted, the status bar shows `[SELECT]`, and a visible line cursor marks the active row.99+Open it with `SSP` in the palette. It lists sessions and tabs, previews the selected target when space allows, and marks stopped sessions.
100+
101+| Key | Action |
102+|---|---|
103+| j / k, Up / Down | move selection |
104+| Enter | switch to or resume selected target |
105+| x | kill/delete selected target |
106+| q, Esc, Ctrl-C | close picker |
107+
108+## Panes and tabs
109+
110+Tabs hold pane layouts. Panes can be split left/right/up/down, stacked, focused by direction, and closed from the command palette. Clicking a pane focuses it.
111+
112+The top bar shows numbered tabs. The bottom bar shows the session name; ephemeral sessions are marked with `*`, for example `0*`.
113+
114+## Visual mode and copy
115+
116+Visual mode freezes a view over history while the program keeps running underneath. Enter it with the `VIS` palette command or by scrolling up with the mouse wheel.
78 117
79 | Key | Action |118 | Key | Action |
80 |---|---|119 |---|---|
@@ -84,3 +123,13 @@ Visual mode freezes a view over history while the program keeps running undernea
84 | v or Space | toggle line selection |123 | v or Space | toggle line selection |
85 | y or Enter | copy selection and exit |124 | y or Enter | copy selection and exit |
86 | q, Esc, Ctrl-C | exit without copying |125 | q, Esc, Ctrl-C | exit without copying |
126+
127+Copy uses OSC 52 clipboard sequences when supported by your terminal.
128+
129+## Development
130+
131+```sh
132+make test # go test ./... -race
133+make lint # goimports check, then go vet ./...
134+make mocks # regenerate mocks
135+```

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 12

Tags 11

↑↓ moveenter openesc close