Keyboard reference

Bindings are grouped by where they work, because that is how they are learned. Inside the application, ? shows the same list, narrowed to the screen you are on.

Generated from the keymap

This page is the output of labdash keys --markdown, which reads the table the help overlay reads. The two cannot drift.

Keys are fixed. Every action below has one binding, in every view, on every platform.

The four tiers

TierContainsWhere you find it
L0 universal Home End PgDn PgUp Tab ⇧Tab Esc ? q b f PThe footer, always
L1 movementj k h l g G Ctrl+D Ctrl+U / n NThe footer and ?
L2 actions51 mnemonics, one for each verb? and the command palette
L3 chordsCtrl+R Ctrl+A Ctrl+K Ctrl+P Ctrl+G Ctrl+T Ctrl+NThis page

L0 and L1 are complete alternatives to each other. Nobody is locked out for not knowing vim, and nobody who knows vim has to reach for an arrow key.

Browse, filter, pin

KeyAction
bbrowse your whole GitLab
ffilter what you are looking at
Ppin this view as a permanent tab

Learn these three and you can build any view labdash can show. They are L0, so they sit in the footer wherever you are.

Everywhere

KeyAction
j move down a row
k move up a row
h previous section
l next section
g Homejump to the first row
G Endjump to the last row
Ctrl+D PgDnpage down
Ctrl+U PgUppage up
Tabnext view
⇧Tabprevious view
focus the preview pane
Escgo back one level
?show the keys for this view
qquit labdash
Jload the next page of rows
rrefresh this section
Ctrl+Rrefresh every section
pshow or hide the preview
oopen it in your browser
Oopen it in your editor
ycopy the branch or ref
Ycopy the URL
/search what is on screen
ngo to the next match
Ngo to the previous match
zcollapse this group
Zcollapse every group
Spaceadd this row to the selection
Lshow the logs
uundo the last reversible action
[previous preview tab
]next preview tab
Ctrl+Asign in again to this instance
Ctrl+Kfind any action by name
Ctrl+Pjump to a project
Ctrl+Gscope to the repository you are in
Ctrl+Tswitch GitLab instance
1apply quick filter 1
2apply quick filter 2
3apply quick filter 3
4apply quick filter 4
5apply quick filter 5

The preview position has no key. auto puts the pane on the right at 120 columns or wider, and along the bottom below that.

Sign in

KeyAction
continue
oopen the approval page again
ycopy the one-time code
tpaste a personal access token instead

Browse

KeyAction
l expand this node
h collapse this node
scope the dashboard to this node

h and l walk the tree here instead of switching tabs, because Browse has no tabs to switch. It is the one context-dependent meaning in the whole keymap, and it is the universal tree convention.

Merge requests

KeyAction
vapprove it, or take your approval back
Vapprove every selected row
mmerge it
cwrite a comment
Ccheck the branch out locally
Wcheck it out as a worktree
dmark it draft, or mark it ready
Rretry the head pipeline
tedit the labels
aassign someone
Aunassign someone
ssend it for review
xclose it
Xreopen it
Uupdate the branch from its target
Ctrl+Nstart a new merge request

Pipelines

KeyAction
Rretry it
xcancel it
mplay a manual job
wkeep watching it as it runs
Dshow the stage graph
Vshow the variables it ran with
Sshow the scheduled pipelines
Ctrl+Nrun a pipeline

Job trace

KeyAction
wfollow the log as it grows
ycopy the log
Ssave it to a file
Rretry this job

w follows a growing log, which is the same verb as watching a running pipeline.

To-Dos

KeyAction
dmark it done
Dmark every To-Do done
ssnooze it
go to what it points at

Coherence rules

Six rules cover the whole keymap. They are what let you guess a key you have not learned.

  1. Lowercase acts on the row; uppercase escalates or reverses it. x closes, X reopens. d marks one done, D marks all. r refreshes one, Ctrl+R refreshes all.
  2. A key means the same verb in every view. R retries. x stops. m makes it go: merge a merge request, or play a manual job. L shows logs. w keeps showing you a live thing. z collapses a group, a tree node, or a log section.
  3. A key resolves to one action in the context you are in. Nothing is bound twice in the same view, so what you learned in one table still holds in the next.
  4. n and N are search navigation only, and only while a search is live. That is why "new merge request" is Ctrl+N.
  5. Esc goes back one level and q quits. Esc will not discard a half-typed comment without asking.
  6. Chords are instantaneous. A chord is Ctrl-prefixed and lands on one keystroke. A g-then-g with a timeout produces mystery input on a slow SSH link.

Reserved keys

KeyWhy it stays free
Ctrl+SMost terminals deliver it as XOFF and freeze the display.
Ctrl+IA terminal delivers it as Tab, which is already the view switcher.
Ctrl+MA terminal delivers it as Enter.
Ctrl+CInterrupt belongs to the shell.
e EEditing a filter is f and reaching the code is O. Leaving these two free makes displaced muscle memory fail loudly.
15Digits belong to the quick-filter chips, so they never select a view or a tab.

Markdown export

labdash keys --markdown > cheatsheet.md

The same content, from the same source, for pinning next to your monitor.

labdash keys --list

Every action name, one per line, for a bug report or a proposal to cite.