cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

keys.md: sections by task, every bound key listed

Dami committed 09b05a9
The one long table becomes sections (moving, entering, selecting,
changing, formatting, sheets, data tools, files and menus, macros), and
lists keys it lacked: Ctrl+F, Ctrl+H, PgUp and PgDn, Alt+PgUp and
Alt+PgDn, Home, End, Ctrl+Home, Ctrl+End, Esc, Alt+D. The pivot and
chart editors' keys live in data.md and charts.md, linked. The mouse
and the screen are tables; vim keys say they're kept as keymap = vim,
and VISUAL gets a table with its : key.
commit
09b05a9dff29998c64c224070b0d8f39efadd428
parent
b94d6e306aa35a5d4604f613d1e8b5ed5239f82f
author
Dami <dami.etoile@gmail.com>
2 files changed, +157 -89
Mdocs/data.md5+-
Mdocs/keys.md241+++++++++++++++++++-----------
M docs/data.md +3 -2
M docs/keys.md +154 -87
@@ -1,75 +1,133 @@
11 # Keys and mouse22 33 Inside the grid, 012 behaves like Google Sheets: if you know a Sheets4-shortcut, try it. Everything is also reachable from the menus (F10 or5-Alt+letter) and the command palette (Ctrl+K), which shows each command's6-shortcut. F1 or Ctrl+/ lists every binding, generated from the same table7-the app uses, so it never drifts from what the keys do.4+shortcut, try it. Every command is also in the menus (F10 or Alt+letter)5+and the command palette (Ctrl+K), which show each command's key. F1 or6+Ctrl+/ lists every binding, generated from the table the app uses, so it7+never drifts from what the keys do. This page is the same list with the8+mouse and the vim keymap added.9+10+## Moving around11+12+| Key | Action |13+|---|---|14+| Arrows | Move one cell |15+| Ctrl+arrows, End | Jump to the edge of the data (End: rightwards) |16+| Tab, Shift+Tab | Right, left |17+| PgUp, PgDn | A screen up, down |18+| Alt+PgUp, Alt+PgDn | A screen left, right |19+| Home, Ctrl+Home, Ctrl+End | Column A, cell A1, the last used cell |20+| Ctrl+G, F5 | Go to a cell, a range or a named range, on any sheet (`Sheet2!B3`) |21+22+## Entering data23+24+| Key | Action |25+|---|---|26+| Type | Replace the cell: `=` starts a formula, `'` forces text, and `$1,200`, `12%`, `9/26/2026` or `14:30` are numbers that keep their format ([formulas.md](formulas.md#what-you-type)) |27+| Enter, Tab | Accept and move down or right; Enter goes back to the column a run of Tabs began in |28+| Enter, F2, double-click | Edit the cell |29+| Esc | Cancel the entry |30+| Ctrl+Enter | Enter the same entry in every selected cell |31+| Arrows, Shift+arrows | While typing a formula, after an operator: point at a cell, or a range |32+| F4 | While typing a formula: cycle the reference at the caret through `A1`, `$A$1`, `A$1`, `$A1` |33+| Up, Down; Tab, Enter | While suggestions for a function, range or sheet name show: pick one; insert it (a sheet as `Summary!`, then arrows point into it). Esc hides them |34+35+## Selecting36+37+| Key | Action |38+|---|---|39+| Shift+arrows, Ctrl+Shift+arrows | Extend the selection, a cell at a time or to the edge of the data; the status line shows Sum, Avg and Count |40+| Ctrl+Space, Shift+Space | Whole columns, whole rows |41+| Ctrl+A | The data around the active cell, then everything |42+| Esc | Deselect |43+44+## Changing the sheet845 946 | Key | Action |1047 |---|---|11-| Type | Replace the cell. `=` starts a formula, `'` forces text; `$1,200`, `12%`, `9/26/2026` and `14:30` are numbers that keep their format |12-| Enter / Tab | Accept and move down / right (Enter returns to where a run of Tabs began) |13-| Enter or F2, double-click | Edit the cell |14-| Arrows while typing a formula | After an operator, pick a cell; Shift+arrows pick a range |15-| Shift+arrows, drag, Shift+click | Select; the status line shows Sum, Avg and Count |16-| Ctrl+arrows | Jump to the edge of the data (add Shift to select) |17-| Click a header, Ctrl+Space, Shift+Space | Select whole columns or rows |18-| Ctrl+A | Select the data, then everything |19-| Del / Backspace | Clear the selection (formatting stays) |20-| Ctrl+Z, Ctrl+Y or Ctrl+Shift+Z | Undo, redo |48+| Del, Backspace | Clear the selection; formatting stays |49+| Ctrl+Z; Ctrl+Y, Ctrl+Shift+Z | Undo; redo |2150 | Ctrl+C, Ctrl+X, Ctrl+V | Copy, cut, paste; references adjust as in Sheets, and copies also go to the system clipboard |2251 | Ctrl+Shift+V | Paste values only |23-| Paste from the terminal | Tab-separated or multi-line text fills a block of cells |24-| Ctrl+D, Ctrl+R | Fill down, fill right; top rows that start a series (1, 2 over blanks) continue it |25-| Drag the fill handle | The ▟ at the selection's corner, shown on hover: continue a series (1, 2, 3; Jan, Feb; Mon, Tue; dates; Item 1, Item 2) or copy |26-| View > Freeze | Keep rows or columns on screen while the rest scrolls |27-| Data > Sort sheet, Sort range | Sort by the active column A to Z or Z to A, or pick columns and order on a bar (Left/Right column, Space order, Alt+A add, Alt+H header row) |28-| Alt+Down, click ▾ in a header | With a filter (Data > Create a filter): pick the column's values (Space checks, type to search) or a condition |29-| Data > Pivot table | Summarize the table on a new sheet; in the pivot editor Up/Down pick a line, Space adds a field (or opens a filter, flips a total, changes the data range), Left/Right change a field's order or summary, S its "show as", R or F2 renames a value, Shift+Up/Down move it, Del removes it, Enter keeps, Esc undoes. Data > Edit pivot table reopens it |30-| Alt+Shift+F | Frequency table of the active column on a new sheet (Data > Frequency table), as VisiData's Shift+F |31-| Ctrl+Alt+= / Ctrl+Alt+- | Insert rows above / delete the selected rows (columns when whole columns are selected) |32-| Ctrl+Enter while typing | Enter the same entry in every selected cell |33-| F4 while typing a formula | Cycle the reference at the caret through A1, $A$1, A$1, $A1 |34-| Typing a function, range or sheet name | Suggestions drop down: Up/Down pick, Tab or Enter insert (a sheet as `Summary!`, then arrows point into it), Esc hides them; inside a function's parentheses the context line shows its arguments with the current one marked |35-| Alt+, / Alt+. | Trace precedents / dependents: highlight the cells a formula reads, or the formulas that read the cell, and jump to the first; press again for the next, Esc to go back (Excel's Ctrl+[ and Ctrl+], which terminals send as Esc) |36-| Data > Named ranges | Name ranges for formulas (`=SUM(Sales)`): Enter goes to one, F2 renames or repoints it, Ctrl+D deletes it; Data > Define named range names the selection |37-| Shift+F2, Insert > Note | Add or edit the active cell's note on the context line (Alt+Enter or Shift+Enter starts a new line); see [data.md](data.md#notes) |38-| Data > Protect sheets and ranges | Protect a range or the sheet so edits to it ask first; Enter goes to a protection, Ctrl+D removes it; see [data.md](data.md#protected-sheets-and-ranges) |39-| Ctrl+Shift+1 ... 6 | Number, time, date, currency, percent, scientific format |52+| Paste in the terminal | Tab-separated or multi-line text fills a block of cells |53+| Ctrl+D, Ctrl+R | Fill down, fill right; a series started in the top rows (1, 2 over blanks) continues |54+| Ctrl+Alt+=, Ctrl+Alt+- | Insert rows above, delete the selected rows (columns when whole columns are selected) |55+56+[data.md](data.md#copy-paste-and-fill) says how formats travel with57+copies and which series the fill handle continues.58+59+## Formatting60+61+| Key | Action |62+|---|---|63+| Ctrl+Shift+1 | Number |64+| Ctrl+Shift+2 | Time |65+| Ctrl+Shift+3 | Date |66+| Ctrl+Shift+4 | Currency |67+| Ctrl+Shift+5 | Percent |68+| Ctrl+Shift+6 | Scientific |4069 | Ctrl+B, Ctrl+I, Ctrl+U, Alt+Shift+5 | Bold, italic, underline, strikethrough |41-| Ctrl+Shift+L / E / R | Align left, center, right |70+| Ctrl+Shift+L, Ctrl+Shift+E, Ctrl+Shift+R | Align left, center, right |4271 | Ctrl+\ | Clear formatting |43-| Ctrl+S, Ctrl+O, Ctrl+Q | Save, open (imports other formats), quit |44-| Ctrl+G or F5 | Go to a cell, a range or a named range, on any sheet (`Sheet2!B3`) |45-| Ctrl+PgDn / Ctrl+PgUp, Alt+Right / Alt+Left | Next / previous sheet; while typing a formula, point into it to insert `Sheet2!A1` |46-| Shift+F11 | New sheet (also Insert > Sheet) |72+73+The rest of the formats are in the Format menu.74+75+## Sheets76+77+| Key | Action |78+|---|---|79+| Ctrl+PgDn, Ctrl+PgUp, Alt+Right, Alt+Left | Next, previous sheet; while typing a formula, point into it to insert `Sheet2!A1` |80+| Shift+F11 | New sheet |4781 | Alt+Shift+K | Go to a sheet by name |48-| Right-click a tab > Hide sheet, View > Hidden sheets | Hide a sheet (formulas still read it; next, previous and the tabs skip it), and list the hidden ones to show one again |49-| Alt+F, Alt+E, Alt+V, Alt+I, Alt+O, Alt+H, F10, click a title | Open a menu (arrows move, Enter runs, Esc closes) |82+83+## Data tools84+85+| Key | Action | More |86+|---|---|---|87+| Ctrl+F, Ctrl+H | Find; find and replace | [data.md](data.md#find-and-replace) |88+| Alt+Down | With a filter on (Data > Create a filter), open the column's filter: Space checks values, type to search, or pick a condition | [data.md](data.md#filter) |89+| Alt+, Alt+. | Trace precedents, dependents: highlight the cells a formula reads, or the formulas that read the cell, and jump to the first; again for the next, Esc to go back (Excel's Ctrl+[ and Ctrl+], which terminals send as Esc) | [formulas.md](formulas.md#building-formulas) |90+| Alt+Shift+F | Frequency table of the active column on a new sheet, as VisiData's Shift+F | [data.md](data.md#frequency-tables) |91+| Shift+F2 | Add or edit the active cell's note; Alt+Enter or Shift+Enter starts a new line | [data.md](data.md#notes) |92+93+Tools with no key of their own have their keys on screen while they're94+open, and in their docs: sorting by several columns and pivot tables95+([data.md](data.md#sort), [pivot tables](data.md#pivot-tables)),96+protected ranges ([data.md](data.md#protected-sheets-and-ranges)), and97+charts ([charts.md](charts.md)). In Data > Named ranges, Enter goes to a98+range, F2 renames or repoints it and Ctrl+D deletes it.99+100+## Files, menus and help101+102+| Key | Action |103+|---|---|104+| Ctrl+S, Ctrl+O, Ctrl+Q | Save, open (and import other formats), quit |105+| F10, Alt+F, Alt+E, Alt+V, Alt+I, Alt+O, Alt+D, Alt+H | Open a menu; arrows move, Enter runs, Esc closes |50106 | Ctrl+K, Alt+/, Ctrl+Shift+P | Search the menus: find and run any command |51-| Right-click, Shift+F10 | Cell, column or row menu |52-| F1 or Ctrl+/ | Keyboard shortcuts |53-| Insert > Chart | Chart the selection (or the table around the active cell); the editor bar picks the type with Left/Right or 1 to 6, S switches rows and columns, H and L toggle the header row and labels, K stacks columns, bars and areas, E adds a scatter's trend line, R changes the range, T the title, and A opens the axis and legend bar (N minimum, X maximum, L log scale, G gridlines, P legend position) |54-| Click a chart, then Arrows / Shift+arrows / Del | Move, resize or delete it; drag the chart or its corner with the mouse; Enter edits it |55-| Cmd- or Ctrl-click a URL | Open it: cells holding a URL, and `=HYPERLINK(url, [label])`, are terminal hyperlinks |56-| Data > Macros | Record what you do as a macro (absolute or relative references), stop and save it with a name and shortcut, run or manage saved macros; see [macros.md](macros.md) |57-| Ctrl+Alt+Shift+0 ... 9 | Run the macro with that shortcut; Esc stops a macro while it runs (the indicator says CMD) |107+| Shift+F10, right-click | The cell, column or row menu |108+| F1, Ctrl+/ | Keyboard shortcuts |109+110+## Macros111+112+| Key | Action |113+|---|---|114+| Ctrl+Alt+Shift+0 to 9 | Run the macro with that shortcut ([macros.md](macros.md#running)) |115+| Esc | Stop a macro while it runs (the mode indicator says CMD) |58116 59117 ## Vim keys60118 61119 File > Settings > Vim keys (also `:settings.vim` or the palette) turns62120 on a vim keymap in the spirit of sc-im and VisiData. It is off by63-default and belongs to you, not the sheet: it isn't saved in `.012`64-files, and File > New and Open keep it. The mode indicator says65-**NORMAL** where it would say READY, **VISUAL** while selecting with66-`v` or `V`, and **COMMAND** on the `:` line; typing into a cell is67-ENTER or EDIT, as always, and Enter, Tab or Esc there return to NORMAL.68-Keys vim doesn't take keep their Sheets meaning (arrows, Del, Ctrl+S,69-Ctrl+C/V, Alt+letter menus, F-keys); Ctrl+D, Ctrl+U and Ctrl+R are70-vim's, so fill down and fill right are in the Edit menu. F1 lists the71-vim keys first, and the menus and palette show them where Sheets' keys72-are taken.121+default and belongs to you, not the sheet: it's kept in the config file122+as `keymap = vim` ([config.md](config.md#keymap)), never in `.012` files.123+The mode indicator says **NORMAL** where it would say READY, **VISUAL**124+while selecting with `v` or `V`, and **COMMAND** on the `:` line; typing125+into a cell is ENTER or EDIT, as always, and Enter, Tab or Esc there126+return to NORMAL. Keys vim doesn't take keep their Sheets meaning127+(arrows, Del, Ctrl+S, Ctrl+C and Ctrl+V, Alt+letter menus, F-keys);128+Ctrl+D, Ctrl+U and Ctrl+R are vim's, so fill down and fill right are in129+the Edit menu. F1 lists the vim keys first, and the menus and palette130+show them where Sheets' keys are taken.73131 74132 | Keys (NORMAL) | Action |75133 |---|---|
@@ -84,7 +142,7 @@ are taken.
84142 | `=` | Start a formula |85143 | `o` `O` | Insert a row below or above and start typing in it |86144 | `x` | Clear the cell (with a count, that many to the right) |87-| `dd` `yy` | Cut or copy the row (with a count, that many rows); `p` pastes them back |145+| `dd` `yy` | Cut or copy the row (with a count, that many rows) |88146 | `p` `P` | Paste rows cut or copied with `dd` or `yy` as new rows below or above, with their row formats; other copied cells paste at the active cell |89147 | `u`, Ctrl+R | Undo, redo |90148 | `v` `V` | Select cells or whole rows (VISUAL); motions stretch the selection |
@@ -93,10 +151,14 @@ are taken.
93151 | `:` | The command line |94152 | Esc | Cancel a count or sequence, leave VISUAL, deselect |95153 96-In VISUAL mode `d` or `x` deletes the selection (whole rows with `V`,97-the cells' contents with `v`) and keeps a copy to paste, `y` copies it,98-`p` pastes over it, `o` goes to the other corner, and `v`, `V` or Esc go99-back to NORMAL.154+| Keys (VISUAL) | Action |155+|---|---|156+| `d` `x` | Delete the selection (whole rows with `V`, the cells' contents with `v`), keeping a copy to paste |157+| `y` | Copy the selection |158+| `p` | Paste over the selection |159+| `o` | Go to the other corner |160+| `:` | The command line, acting on the selection |161+| `v` `V`, Esc | Back to NORMAL |100162 101163 The `:` line takes:102164
@@ -104,11 +166,11 @@ The `:` line takes:
104166 |---|---|105167 | `:B12`, `:Sheet2!A1`, `:C3:D9`, `:Sales` | Go to a cell, range or named range |106168 | `:40` | Go to row 40 |107-| `:w`, `:w name`, `:w out.csv` | Save, Save as, or Download as another format, just as the File menu does |169+| `:w`, `:w name`, `:w out.csv` | Save, Save as, or Download as another format, as the File menu does |108170 | `:q`, `:q!` | Quit (asking about unsaved changes), quit discarding them |109171 | `:wq`, `:x` | Save and quit; `:x` saves only if something changed |110172 | `:e name`, `:e!` | Open a sheet or import a file; refused with unsaved changes unless `:e!` |111-| `:edit.fill_down`, `:fill down` | Any command, by its ID or title |173+| `:edit.fill_down`, `:fill down` | Any command, by its id or title |112174 113175 Completions for commands appear under the line as you type, drawn from114176 the same registry as the menus and palette: Tab puts the highlighted
@@ -118,31 +180,36 @@ line isn't a command itself (`:fill d` Enter fills down).
118180 119181 ## Mouse120182 121-Click a cell to select it, drag to select a range, Shift+click to extend,122-and click a column or row header (or the corner) to select whole columns,123-rows or everything. Double-click edits. Drag a column header's right edge124-to resize it; double-click the edge to fit the contents. Dragging past the125-edge of the grid scrolls. Right-click opens the cell, column or row menu.126-The mouse pointer changes shape over cells, resize handles and the formula127-bar in terminals that support it (OSC 22).128-129-The sheet tabs at the left of the status line take the mouse too: click a130-tab to show its sheet, double-click to rename it, right-click for its menu131-(rename, duplicate, delete, hide, move left or right), drag it onto another tab to132-move it there, and click `+` to add a sheet. When the tabs don't all fit,133-`‹` and `›` step through them. While typing a formula, clicking a tab points134-into that sheet, as in Sheets.135-136-In Ghostty and xterm, Shift+click normally starts the terminal's own text137-selection; 012 asks the terminal to pass it through (XTSHIFTESCAPE) and138-restores that on exit.183+| Gesture | Action |184+|---|---|185+| Click, drag, Shift+click | Select a cell, a range, or extend the selection; dragging past the edge scrolls |186+| Click a column or row header, or the corner | Select whole columns, rows, or everything |187+| Double-click | Edit the cell |188+| Drag the fill handle (▟ at the selection's corner, shown on hover) | Continue a series (1, 2, 3; Jan, Feb; Mon, Tue; dates; Item 1, Item 2) or copy |189+| Drag a column header's right edge; double-click it | Resize the column; fit it to its contents |190+| Right-click | The cell, column or row menu |191+| Click `▾` in a header | Open the column's filter |192+| Click a chart; drag it or its corner | Select it; move or resize it (then arrows move it, Shift+arrows resize, Enter edits, Del deletes) |193+| Cmd- or Ctrl-click a link | Open a URL in a cell or a `=HYPERLINK(url, [label])` |194+| Hover a cell with a note | Show the note beside it |195+196+The sheet tabs at the left of the status line take the mouse too: click197+a tab to show its sheet, double-click to rename it, right-click for its198+menu (rename, duplicate, delete, hide, move left or right), drag it onto199+another tab to move it there, and click `+` to add a sheet. When the200+tabs don't all fit, `‹` and `›` step through them. While typing a201+formula, clicking a cell or a tab points at it, as in Sheets.202+203+The pointer changes shape over cells, resize handles and the formula bar204+in terminals that support it (OSC 22). In Ghostty and xterm, Shift+click205+normally starts the terminal's own text selection; 012 asks the terminal206+to pass it through (XTSHIFTESCAPE) and restores that on exit.139207 140208 ## The screen141209 142-The top three lines are the **menu bar** with the mode indicator on the143-right (and `REC` beside it while a macro is recorded), the **formula bar** (name box, then the cell's contents or the entry144-being typed) and the **context line**, which holds prompts, key hints,145-formula errors and explanations. The bottom line is the **status line**:146-the sheet tabs (as tmux lists its windows, the sheet shown highlighted),147-the file name, whether it's modified, and Sum, Avg and Count for a148-selection.210+| Line | Shows |211+|---|---|212+| Menu bar (top) | The menus, and the mode indicator on the right (`REC` beside it while a macro records) |213+| Formula bar | The name box, then the cell's contents or the entry being typed |214+| Context line | Prompts, key hints, formula errors and explanations, and bars such as find and the chart editor |215+| Status line (bottom) | The sheet tabs (the one shown highlighted), the file name, whether it's modified, and Sum, Avg and Count for a selection |