cat / 012
clone

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

Make Google Sheets the interaction target in docs

Dami committed efa9138
The UX bar, roadmap goals and README now say that inside the grid one23
behaves like Sheets, with 1-2-3 as the visual identity.
commit
efa91386b904287f935abe23648b5aeebc8264ab
parent
08cfa27e108c71f6495671033b51b6318996913b
author
Dami <dami.etoile@gmail.com>
3 files changed, +42 -26
MREADME.md27+++++++++++++++---------
MROADMAP.md8++++----
Mdocs/UX.md33+++++++++++++++++++-----------
M README.md +17 -10
@@ -1,6 +1,7 @@
11 # one2322 3-A Lotus 1-2-3 style spreadsheet for the terminal, built on Bubble Tea v2.3+A spreadsheet for the terminal with a Lotus 1-2-3 look and Google Sheets4+behavior, built on Bubble Tea v2.45 56 ```sh67 make run # build (pure Go, CGO_ENABLED=0) and start
@@ -9,17 +10,23 @@ make run # build (pure Go, CGO_ENABLED=0) and start
910 1011 ## Keys1112 13+Inside the grid, one23 works like Google Sheets.14+1215 | Key | Action |1316 |---|---|14-| Arrows, PgUp/PgDn, Tab/Shift+Tab, Home | Move the cell pointer |15-| Type text | Label (`'` left, `"` right, `^` center) |16-| Type `0-9 + - . ( @ # $ =` | Value or formula, e.g. `+A1*2`, `@SUM(A1..A5)` |17-| Arrow after an operator | POINT mode: arrow to a cell, `.` anchors a range |18-| F2 | Edit the current cell |19-| F5 | Go to an address |20-| Del | Erase the current cell |21-| `/` or `<` | Menu: Worksheet, Range, File, Quit (type first letters, e.g. `/fs`) |22-| F1 | Help |17+| Type | Replace the cell. `=` starts a formula, `'` forces text; `$1,200` and `12%` are numbers |18+| Enter / Tab | Accept and move down / right (Enter returns to where a run of Tabs began) |19+| Enter or F2, double-click | Edit the cell |20+| Arrows while typing a formula | After an operator, pick a cell; Shift+arrows pick a range |21+| Shift+arrows, drag, Shift+click | Select; the status line shows Sum, Avg and Count |22+| Ctrl+arrows | Jump to the edge of the data (add Shift to select) |23+| Click a header, Ctrl+Space, Shift+Space | Select whole columns or rows |24+| Ctrl+A | Select the data, then everything |25+| Del / Backspace | Clear the selection |26+| Ctrl+S, Ctrl+O, Ctrl+Q | Save, open, quit |27+| Ctrl+G or F5 | Go to a cell |28+| F10 | Menu |29+| F1 or Ctrl+/ | Keyboard shortcuts |2330 2431 ## Layout2532
M ROADMAP.md +4 -4
@@ -1,7 +1,7 @@
11 # Roadmap: past 1-2-322 3-Principles: keyboard first, 1-2-3 muscle memory stays the default, the main4-binary stays pure Go (`CGO_ENABLED=0`), and every feature ships with unit3+Principles: inside the grid one23 behaves like Google Sheets; 1-2-3 is the4+visual identity around it. The main binary stays pure Go (`CGO_ENABLED=0`), and every feature ships with unit55 tests, a libghostty e2e test and reviewed golden screens. Visual and UX66 quality keep pace with features: see [docs/UX.md](docs/UX.md).77
@@ -9,8 +9,8 @@ quality keep pace with features: see [docs/UX.md](docs/UX.md).
99 1010 | Phase | Goal | Done when |1111 |---|---|---|12-| 1 | The engine can do everything 1-2-3 R2 users reach for daily, and every change can be undone | Undo/redo covers every mutation; /Copy, /Move, /Worksheet Insert and Delete adjust relative and absolute references; /Range Format and range names work and persist; date and finance functions match excelize on a differential test suite |13-| 2 | Finding and using features is faster than in any terminal spreadsheet | Ctrl+P palette reaches every command with its key shown; formulas autocomplete with signature hints; the status line shows live stats of the pointed range; precedents and dependents are visible and jumpable; titles freeze; search and filter work; fill down and series work; a vim keymap is available |12+| 1 | The engine does what Sheets users reach for daily, and every change can be undone | Undo/redo (Ctrl+Z/Ctrl+Y) covers every mutation; copy, cut and paste (Ctrl+C/X/V, paste values) and insert/delete rows and columns adjust relative and `$absolute` references; number formats (Format menu, auto-detected `$` and `%` on entry) and named ranges work and persist; Sheets' everyday functions, dates and finance functions match excelize on a differential test suite |13+| 2 | Finding and using features is faster than in any terminal spreadsheet | A Sheets-structured menu bar (File Edit View Insert Format Data Help) and a searchable command palette reach every command with its key shown; formulas autocomplete with signature hints; precedents and dependents are visible and jumpable; rows and columns freeze; find/replace and filter work; fill down (Ctrl+D) and series fill work; an optional vim keymap exists |1414 | 3 | one23 uses the terminal it's running in to the fullest, and degrades gracefully | Copy and paste ranges through the system clipboard; charts render as images in Ghostty/kitty and as text elsewhere; URLs are clickable; error cells are marked beyond color; cursor shape reflects the mode; the theme follows light and dark |1515 | 4 | Data moves in and out of one23 without friction or cgo | CSV/TSV, XLSX, SQLite, Parquet and Lotus .wk1 import, with export where it makes sense; large imports show progress; the binary still builds with `CGO_ENABLED=0` |1616 | 5 | one23 goes where 1-2-3 couldn't | Multiple sheets with cross-sheet references; derived frequency and pivot sheets; recorded and Starlark macros; an SSH server mode; opt-in decimal arithmetic; VHS demo tapes in CI |
M docs/UX.md +21 -12
@@ -5,14 +5,19 @@ follow-up task.
55 66 ## Principles77 8-1. **1-2-3 muscle memory is the default.** `/` menus with first-letter9- selection, POINT mode, F2/F5, label prefixes. New power is added10- alongside, never by breaking these.8+1. **Inside the grid, behave like Google Sheets.** Assume users know9+ Sheets, not 1-2-3. Typing replaces a cell, `=` starts a formula, Enter10+ commits and moves down (back to the starting column after Tabs), Tab11+ moves right, Shift+arrows and the mouse select, Ctrl+arrows jump to the12+ data edge, and Sheets shortcuts do what Sheets does. When Sheets and13+ 1-2-3 disagree, Sheets wins. 1-2-3 lives on as the visual identity:14+ the control panel doubling as the formula bar, the mode indicator, the15+ crisp character grid.1116 2. **Everything is discoverable.** Every action is a registered command1217 (`internal/ui/commands.go`) with a title and one-line description. It is13- reachable from the slash menu where 1-2-3 would put it, from key bindings14- in `keymap`, and from help (generated from the registry). When the15- command palette lands, it lists every registered command with its keys.18+ reachable from the menu where Sheets would put it, from key bindings in19+ `keymap`, and from help (generated from the registry). When the command20+ palette lands, it lists every registered command with its keys.1621 3. **The screen always says what's going on.** The mode indicator is always1722 correct. The third panel line tells the user what keys do in any1823 non-READY state. Prompts live on the second panel line.
@@ -31,10 +36,13 @@ follow-up task.
3136 - Text on a colored background needs about 4.5:1 contrast against both3237 reference palettes (`e2e/palette_test.go`). Check it in the gallery.3338 - Never rely on color alone: state also shows as text (mode indicator,34- `[modified]`, `ERR`, `CIRC`).35-- Numbers right-aligned, labels left unless prefixed, headers centered.36- Menu items separated by two spaces. Keys shown as `F2`, `Ctrl+Z`, `Del`37- (see `keyLabel`).39+ `modified`, `#DIV/0!`, `Circular reference`).40+- Numbers right-aligned, text left, booleans and errors centered, one41+ column of padding, text overflowing into empty neighbors: as Sheets.42+ Headers centered. Menu items separated by two spaces. Keys shown as43+ `F2`, `Ctrl+Z`, `Del` (see `keyLabel`).44+- The active cell is always distinct from the rest of a selection, and45+ the headers of selected rows and columns are highlighted.3846 - Layout works from 60x16 up to very wide terminals. Nothing jumps3947 position between frames; overlays don't shift the grid.4048 - Render only what's visible. A keystroke on a 10,000-cell sheet must feel
@@ -43,7 +51,7 @@ follow-up task.
4351 ## Required with every user-facing change4452 4553 - [ ] Registered command(s) with title and description; key binding in46- `keymap` if it has one; menu entry where 1-2-3 would have it.54+ `keymap` if Sheets has one; menu entry where Sheets would have it.4755 - [ ] Unit tests in `internal/ui` driving `Update`, plus engine tests.4856 - [ ] An e2e test in `e2e/` for the main flow.4957 - [ ] Golden screen(s) in `e2e/screens_test.go` for every new visual state,
@@ -51,7 +59,8 @@ follow-up task.
5159 - [ ] `make screens`, then look at `e2e/testdata/screens/gallery.html`5260 (serve it over HTTP and screenshot it, or open it in a browser).5361 Fix anything misaligned, low-contrast, cramped or clipped before54- committing.62+ committing. Screens are drawn from libghostty's cell grid, so they63+ match what a terminal shows.5564 - [ ] README keys table updated if keys changed.5665 5766 ## Review checklist for screenshots