[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3506":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":8,"rankLanguage":8,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":8,"pushedAt":8,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":14,"starSnapshotCount":14,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},3506,"l123","duane1024\u002Fl123","duane1024",null,"Rust",126,8,1,3,0,6,40.46,"MIT License",false,"master",true,[],"2026-06-12 04:00:18","# l123\n\n**A Lotus 1-2-3–style terminal spreadsheet with modern Excel compatibility.**\n\nl123 recreates the classic DOS-era spreadsheet experience — slash menus,\nthree-line control panel, keyboard-first workflows, WYSIWYG icon panel,\nand all — on top of a modern formula engine with native `.xlsx`\nround-trip.\n\nIts interaction model targets **Lotus 1-2-3 Release 3.4a for DOS**\n(1993). Its compute and I\u002FO layers are Rust, IronCalc, and UTF-8.\n\n![l123 running in iTerm](docs\u002Fiterm-screenshot.png)\n\n---\n\n## ✦ Status\n\nCurrently `v1.3.0`, with all MVP milestones (M0–M10) shipped.\nTracking the milestone plan in [`docs\u002FPLAN.md`](docs\u002FPLAN.md):\n\n| Milestone | Scope | State |\n|---|---|---|\n| M0 | Grid, pointer nav, workspace bring-up | ✅ done |\n| M1 | Control panel, modes, first-char input | ✅ done |\n| M2 | Engine wire-up, formulas, recalc | ✅ done |\n| M3 | Menu system and MVP slash commands | ✅ done |\n| M4 | `.xlsx` and CSV round-trip | ✅ done |\n| M5 | 3D sheets, GROUP, named ranges, undo | ✅ done |\n| M6 | Printing (ASCII, PDF, line-printer) and Range Search | ✅ done |\n| M7 | Graphs: 7 chart types, F10 view, SVG\u002FPNG save | ✅ done |\n| M8 | `\u002FData`: Fill, Sort, Query, Table, Distribution, Regression, Parse | ✅ done |\n| M9 | Macros: `\u002FX`, `{BRANCH}`, `{IF}`, `{MENUBRANCH}`, Learn | ✅ done |\n| M10 | Polish: R3.4a WYSIWYG icon panel, startup splash, F1 context help, DOS theme | ✅ done |\n| M11 | Modern data import (JSON, Parquet, SQLite) and `\u002FRange Compare` | 🚧 in progress |\n| M12 | `\u002FData External` (live SQL: SQLite, Postgres) | 📋 planned |\n| M13 | Alt-F10 ADDIN: Data Workbench transform overlay | 📋 planned |\n\nThe MVP slice is feature-complete and stable. Currently 232 acceptance\ntranscripts under `tests\u002Facceptance\u002F` lock the authenticity contract\n(SPEC §20) plus a tutorial-derived suite (T01–T12) tracking the 1-2-3\nR3.1 Tutorial chapters end-to-end.\n\n---\n\n## ✦ Install\n\n### Homebrew (macOS \u002F Linux)\n\n[Homebrew](https:\u002F\u002Fbrew.sh) is the standard package manager for macOS\n(and works on Linux too). If you don't already have it, install it\nfirst from [brew.sh](https:\u002F\u002Fbrew.sh), then:\n\n```bash\nbrew install duane1024\u002Fl123\u002Fl123\n```\n\nOr tap once and install by name:\n\n```bash\nbrew tap duane1024\u002Fl123\nbrew install l123\n```\n\nUpgrade later with `brew upgrade l123`.\n\n### From source\n\nRequires Rust stable (pinned via `rust-toolchain.toml`).\n\n```bash\ngit clone git@github.com:duane1024\u002Fl123.git\ncd l123\ncargo build --release\n.\u002Ftarget\u002Frelease\u002Fl123            # or: cargo run -p l123\n```\n\nOpen an existing workbook:\n\n```bash\nl123 financials.xlsx\n```\n\nInspect or initialize configuration:\n\n```bash\nl123 config            # show effective settings and their sources\nl123 config --init     # write a sample ~\u002F.l123\u002FL123.CNF\n```\n\nSee [`docs\u002FCONFIG.md`](docs\u002FCONFIG.md) for the full list of keys and\nenvironment variables.\n\n---\n\n## ✦ Keyboard, the short version\n\nThe keyboard *is* the product.\n\n| Key | What it does |\n|---|---|\n| `\u002F` | Open the slash menu |\n| `:` | Open the `:` (WYSIWYG) menu |\n| First letter | Descend into a menu item (no `Enter` needed) |\n| Arrows \u002F `Tab` | Move pointer; during entry, commit-and-move |\n| `Enter` | Commit cell entry |\n| `Esc` | Back out one level (menu, prompt, POINT anchor) |\n| `Ctrl-Break` | Abort to READY from anywhere; cancel a WAIT op |\n| `.` (in POINT) | Cycle which corner of the range is anchored |\n| `F1` | Context help (824-page R3.1 manual, navigable) |\n| `F2` | Edit current cell |\n| `F3` | List named ranges (overlay; works in GOTO and prompts) |\n| `F4` | Cycle `$` absoluteness in a reference |\n| `F5` | GOTO cell or named range |\n| `F7` | Repeat last `\u002FData Query` |\n| `F8` | Repeat last `\u002FData Table` |\n| `F9` | Recalculate |\n| `F10` | Full-screen graph view |\n| `Alt-F2` | STEP — single-step macro execution |\n| `Alt-F3` | RUN — invoke a macro by name |\n| `Alt-F4` | Undo |\n| `Alt-F5` | LEARN — toggle keystroke recording |\n| `Alt-`*letter* | Run macro `\\`*letter* (e.g. `Alt-A` → `\\A`) |\n| `Ctrl-PgUp` \u002F `Ctrl-PgDn` | Previous \u002F next sheet |\n| `Ctrl-End` then `Ctrl-PgUp\u002FPgDn` | Previous \u002F next open file |\n\nMouse is supported for the WYSIWYG icon panel (17 icons, R3.4a layout)\nplus cell click, drag-select, scroll wheel, and POINT extend.\n\nFormulas use 1-2-3 syntax: `@SUM(A1..A5)`, not `=SUM(A1:A5)`. The `@`\nsigil and `..` separator are required. `#AND#`, `#OR#`, `#NOT#` are the\nlogical operators.\n\nFirst character typed in READY decides label vs. value: digits and\n`+ - . ( @ # $` start a value; anything else starts a label (with an\nauto-inserted `'` prefix). `\"` = right-align, `^` = center, `\\-` fills the\ncell with dashes.\n\n---\n\n## ✦ What works today\n\n**Core UX**\n\n- Three-line control panel with live mode indicator\n- 13 modes (READY, LABEL, VALUE, EDIT, POINT, MENU, FILES, NAMES, HELP,\n  ERROR, WAIT, FIND, STAT)\n- Full slash-menu tree: every path in `docs\u002FMENU.md` is reachable; MVP\n  leaves execute, non-MVP leaves show \"Not implemented yet\" in line 3\n- POINT mode with `.` corner cycle, F3 named-range picker, typed\n  addresses, and mouse drag-select\n- Async WAIT mode for long ops (file load\u002Fsave, recalc, large imports)\n  with progress bar and Ctrl-Break cancellation\n\n**Worksheet, Range, File**\n\n- `\u002FWorksheet`, `\u002FRange`, `\u002FCopy`, `\u002FMove`, `\u002FFile`, `\u002FQuit` —\n  full menus implemented\n- `.xlsx` round-trip through IronCalc (formulas, alignment, borders,\n  comments, fills, fonts, frozen panes, hidden sheets, merges,\n  sheet color, tables); `.csv` import and export\n- `.WK3` read (values, formulas, basic styles, column widths) via the\n  optional `wk3` cargo feature, gated behind a local `ironcalc_lotus`\n  fork — see CLAUDE.md\n- 3D workbooks: `A..IV` sheets, `A:B3..C:D5` ranges, GROUP mode\n- Named ranges (Create\u002FDelete\u002FReset\u002FLabels\u002FNote\u002FTable\u002FUndefine);\n  `@` function set including the legacy `@D360`, `@DGET`, `@REPLACE`\n- Command-journal undo (Alt-F4), toggleable via `\u002FWGD Other Undo`\n- Multi-file sessions (`\u002FFile Open Before|After`, Ctrl-End navigation,\n  `\u002FFile List`)\n\n**Print, Graph, Data**\n\n- `\u002FPrint File` to ASCII, PDF, or line-printer output; headers, footers,\n  margins, page-length, formatted \u002F unformatted \u002F as-displayed \u002F\n  cell-formulas modes; column page breaks; `|` in first column hides\n  rows from print\n- `\u002FRange Search Formulas|Labels|Both` Find and Replace\n- `\u002FGraph` tree: Line, Bar, XY, Stack, Pie, HLCO, Mixed; Titles, Legend,\n  Scale, Grid, Color\u002FB&W, Data-Labels; Name Create\u002FUse\u002FDelete\u002FReset\u002FTable\n- F10 \u002F `\u002FGraph View` full-screen rendering with Unicode bar + line\n  output; Kitty \u002F iTerm2 \u002F Sixel image support via `ratatui-image`\n- `\u002FGraph Save` to SVG (and plotters PNG output for all chart types)\n- `\u002FData` tree (full): Fill, Sort (with extra keys), Query\n  (Find\u002FExtract\u002FUnique\u002FDelete\u002FModify, F7 repeat), Table 1\u002F2 (F8 repeat),\n  Distribution (with Unicode-bar histogram), Regression, Parse, Matrix\n\n**WYSIWYG, Macros, Help**\n\n- R3.4a WYSIWYG icon panel: all 17 icons, mouse-wired, hover hints\n- `:` (WYSIWYG) menu: Format (Bold, Color, Alignment), Display (Mode,\n  Grid), Special (Copy, Move, Color), Worksheet status; xlsx round-trip\n- Macros: `\u002FX` legacy commands; `{BRANCH}`, `{IF}`, `{LET}`, `{PUT}`,\n  `{GETLABEL}`, `{GETNUMBER}`, `{MENUBRANCH}`, `{QUIT}`, `{?}` pause,\n  `{BEEP}`, special-key tokens, subroutines, `\\0` autoexec\n- `\u002FWorksheet Learn Range` keystroke recording (Alt-F5 toggle, Alt-F2\n  STEP, Alt-F3 RUN)\n- F1 context help: full 1-2-3 R3.1 reference manual (824 pages),\n  context-aware per mode\n- Startup splash screen\n- DOS theme (black-on-cyan headers) via `--theme dos`, `L123_THEME`,\n  or `theme=` in `~\u002F.l123\u002FL123.CNF`\n- Auto-contrast for xlsx cells with light fills on dark terminals\n\n## ✦ Coming\n\n- **M11** `\u002FFile Import Json|Jsonl|Parquet|Sqlite` — modern data\n  loaders with type inference; `\u002FRange Compare` for diffing two ranges\n- **M12** `\u002FData External` — live SQL backing ranges (SQLite, Postgres)\n  with `\u002FDEC Connect`, `\u002FDEU Use`, `\u002FDER Refresh`; xlsx persistence of\n  the binding\n- **M13** Alt-F10 ADDIN — built-in Data Workbench overlay with a\n  VisiData-inspired transform stack (Sort, RegexFilter, Frequency,\n  Describe) and value write-back\n- Stretch: LMBCS compose key (Alt-F1), additional CRT themes (green,\n  amber, classic blue-on-black), APP1\u002FAPP2\u002FAPP3 plug-in slots\n\n---\n\n## ✦ Architecture\n\nRust workspace, strict layering:\n\n```\nl123-core  ← types only, zero external deps\n  ↑\nl123-parse, l123-menu\n  ↑\nl123-engine           (wraps IronCalc behind a trait)\n  ↑\nl123-cmd, l123-io, l123-graph, l123-print\n  ↑\nl123-ui               (ratatui + crossterm; engine-agnostic)\n  ↑\nl123                  (binary)\n```\n\nIronCalc is behind the `Engine` trait so it can be swapped. 1-2-3 formula\nsyntax (`@SUM`, `..`, `#AND#`) is translated to Excel syntax in\n`l123-parse` before it reaches the engine. The UI never sees IronCalc\ntypes.\n\n---\n\n## ✦ Authenticity contract\n\nl123 makes two promises (`docs\u002FSPEC.md` §1):\n\n1. An experienced 1-2-3 R3.4a user can drive l123 cold, without reading\n   anything.\n2. Files round-trip cleanly to and from `.xlsx`.\n\nSPEC §20 enumerates the behaviors — three-line control panel, menu\naccelerators, POINT anchor semantics, first-char rule, `@` sigil, format\ntags, commit-on-arrow, WYSIWYG icon panel, and so on — that the project\nfails if it misses. Every item in the contract has at least one\nacceptance transcript under `tests\u002Facceptance\u002F`.\n\n---\n\n## ✦ Development\n\nStrict red \u002F green \u002F refactor. Conventions live in [`CLAUDE.md`](CLAUDE.md).\n\n```bash\ncargo test --workspace                                  # all tests\ncargo test -p l123-ui --test acceptance                 # keystroke transcripts\ncargo clippy --workspace --all-targets -- -D warnings   # lint\ncargo fmt --all                                         # format\n```\n\nAcceptance transcripts are `.tsv` files describing keystrokes in and\nscreen state out; see `tests\u002Facceptance\u002FREADME.md` for the directive\nsyntax. Every UI-visible change lands with a transcript.\n\nCanonical docs (treat as sources of truth):\n\n- [`docs\u002FSPEC.md`](docs\u002FSPEC.md) — what l123 *is*\n- [`docs\u002FPLAN.md`](docs\u002FPLAN.md) — milestones and risk register\n- [`docs\u002FMENU.md`](docs\u002FMENU.md) — the complete menu tree\n\nIf code and doc disagree, fix the doc first.\n\n---\n\n## ✦ Non-goals\n\n- Not a DOS emulator. No INT21h, no code pages. Strings are UTF-8.\n- Not a visual homage. Functional fidelity, not CRT nostalgia. (Green \u002F\n  amber themes are a stretch goal, not the point.)\n- Not a macro player for existing `.WK3` files. Read-only `.WK3` import\n  is a stretch goal; write is not planned.\n- Not a reimplementation of the 1-2-3 compute core. IronCalc does that.\n- Not aimed at Lotus 1-2-3 for Windows or SmartSuite. Release 3.4a for\n  DOS only.\n\n---\n\n## ✦ Philosophy\n\nSpreadsheets didn't get worse — they just got heavier.\n\nl123 brings back the speed, clarity, and keyboard-driven precision of\nearly spreadsheet software, without sacrificing compatibility with modern\nworkflows.\n\n---\n\n## ✦ Why?\n\nBecause the `\u002F` key was never the problem.\n\n---\n\n## ✦ License\n\nLicensed under the MIT License. See [`LICENSE`](LICENSE).\n","l123 是一个在终端中运行的电子表格程序，模仿了经典的 DOS 时代 Lotus 1-2-3 的界面和操作方式，并支持现代 Excel 的 `.xlsx` 文件格式。其核心功能包括通过键盘快捷键进行高效操作、支持复杂的公式计算及数据处理，并且具备与现代数据格式（如 CSV、JSON 等）交互的能力。项目采用 Rust 语言开发，确保了高性能与安全性。适用于需要轻量级、命令行环境下进行数据分析或希望体验复古风格但又不失现代化功能的用户。",2,"2026-06-11 02:54:40","CREATED_QUERY"]