Every relative link in the docs, README.md, ROADMAP.md and CLAUDE.md points at the page and heading its target moved to.
- commit
- 6cea7499f72116a27c5df786558f65d8ff1788cd
- parent
- 6fc38a05ef8d87209a7262a06f420b44d5b2d91d
- author
- Dami <dami.etoile@gmail.com>
@@ -1,7 +1,7 @@
11 # Working on 01222 3-Read [docs/UX.md](docs/UX.md), [docs/extending.md](docs/extending.md) and4-[docs/testing.md](docs/testing.md) before changing code.3+Read [docs/UX.md](docs/contributing/ux.md), [docs/extending.md](docs/contributing/extending.md) and4+[docs/testing.md](docs/contributing/testing.md) before changing code.55 66 ## No broken windows77 @@ -31,28 +31,28 @@ searches every command. `012 config edit` opens the settings file.
3131 3232 ## A short tour3333 34-- **Formulas as in Sheets**, with [Sheets' functions](docs/functions.md),34+- **Formulas as in Sheets**, with [Sheets' functions](docs/reference/functions.md),3535 suggestions and argument hints, pointing at cells with the arrows or the3636 mouse, named ranges, references between sheets, optional decimal3737 arithmetic for money, and undo for everything38- ([formulas](docs/formulas.md)).38+ ([formulas](docs/formulas/README.md)).3939 - **Data tools**: freeze, sort, filter, find and replace, conditional4040 formatting, dropdowns and checkboxes, notes, protected ranges, and live41- pivot tables ([working with data](docs/data.md)).41+ pivot tables ([working with data](docs/sheets/README.md)).4242 - **Charts** that float over the grid and follow their data, drawn as real4343 images in kitty, Ghostty and WezTerm and as text elsewhere44- ([charts](docs/charts.md)).44+ ([charts](docs/sheets/charts.md)).4545 - **Files**: a diff-friendly JSON format, import from CSV, TSV, XLSX,4646 SQLite, Parquet and Lotus 1-2-3, export to CSV, TSV, XLSX and SQLite47- ([files](docs/files.md)).47+ ([files](docs/files/README.md)).4848 - **Macros**, recorded or written as Starlark scripts saved with the sheet49- ([macros](docs/macros.md)).49+ ([macros](docs/sheets/macros.md)).5050 - **Made for terminals**: the mouse, hyperlinks, the system clipboard over5151 SSH, your terminal's colors or any of hundreds of schemes, optional vim5252 keys, and `012 serve` to reach your sheets over SSH53- ([keys](docs/keys.md), [themes](docs/themes.md), [SSH](docs/ssh.md)).53+ ([keys](docs/reference/keys.md), [themes](docs/terminal/themes.md), [SSH](docs/terminal/ssh.md)).5454 - **JEV functions** ask TypeSafe's hosted model about your data from a55- formula ([JEV](docs/jev.md)).55+ formula ([JEV](docs/formulas/jev.md)).5656 5757 | | |5858 |---|---|@@ -68,7 +68,7 @@ searches every command. `012 config edit` opens the settings file.
6868 The recordings are [VHS](https://github.com/charmbracelet/vhs) tapes in6969 [`demos/`](demos), rendered by `make demos` in the Catppuccin Mocha7070 palette; 012 draws in your terminal's own colors by default71-([themes](docs/themes.md)). Charts show as text here.71+([themes](docs/terminal/themes.md)). Charts show as text here.7272 7373 ## More7474 @@ -76,7 +76,7 @@ palette; 012 draws in your terminal's own colors by default
7676 working on it7777 - [Roadmap](ROADMAP.md)7878 - Working on 012: `make build`, then `make check` before a push; see79- [testing](docs/testing.md) and [CLAUDE.md](CLAUDE.md)79+ [testing](docs/contributing/testing.md) and [CLAUDE.md](CLAUDE.md)8080 8181 Young and moving quickly. The file format is versioned and older files8282 keep loading; the Go packages are internal and may change at any time.@@ -4,7 +4,7 @@ Principles: inside the grid 012 behaves like Google Sheets; 1-2-3 is the
44 visual identity around it. The main binary stays pure Go55 (`CGO_ENABLED=0`), and every feature ships with unit tests, a libghostty66 e2e test and reviewed golden screens. Visual and UX quality keep pace7-with features: see [docs/UX.md](docs/UX.md).7+with features: see [docs/UX.md](docs/contributing/ux.md).88 99 This page is what's ahead. What has shipped is listed once, at the end,1010 with the doc that describes it; when an item ships, it moves there as@@ -20,7 +20,7 @@ Sizes: S (a day or two), M (about a week), L (weeks).
2020 |---|---|---|2121 | Open 012's XLSX output in Excel and LibreOffice before releases, as was done for Google Sheets | The writer is otherwise checked by excelize and 012's reader | S |2222 | Conditional formatting and validation, what's left: data bars and icon sets, "top 10", "duplicate values", date periods (this week, last month), validation on pastes and fills, rules moving with cut and paste, a dropdown's chip look, and custom checkbox values | Excel's other rule types come in as notes | M |23-| Remaining overlays get narrow hosts: filter picker, sort and choice bars, chart editor, shortcuts, named ranges, cell entry and prompts | Components testable without the model ([architecture.md](docs/architecture.md#the-ui)) | M |23+| Remaining overlays get narrow hosts: filter picker, sort and choice bars, chart editor, shortcuts, named ranges, cell entry and prompts | Components testable without the model ([architecture.md](docs/contributing/architecture.md#the-ui)) | M |2424 2525 ### 2. Spreadsheet features Sheets users reach for2626 @@ -33,7 +33,7 @@ Sizes: S (a day or two), M (about a week), L (weeks).
3333 3434 The grid is Excel's, 1,048,576 x 16,384, and memory is bounded by the3535 `max-cells` budget rather than the grid. The budget rises in measured36-steps; see [docs/limits.md](docs/limits.md#what-would-raise-the-bounds).36+steps; see [docs/limits.md](docs/contributing/limits.md#what-would-raise-the-bounds).3737 3838 | Item | Result | Size |3939 |---|---|---|@@ -58,7 +58,7 @@ steps; see [docs/limits.md](docs/limits.md#what-would-raise-the-bounds).
5858 | Prebuilt binaries attached to version tags, built locally (the GitHub repo is hosting only); tags carry release notes in their message | S |5959 | `make stress-report` thresholds that flag regressions over a set percentage against the last release | S |6060 | Grafana: a trace panel for the nested spans | S |61-| Accessibility: a high-contrast theme, and an audit that every state reads without color (a [UX rule](docs/UX.md#visual-rules)) | S |61+| Accessibility: a high-contrast theme, and an audit that every state reads without color (a [UX rule](docs/contributing/ux.md#visual-rules)) | S |6262 6363 ## Later: sharing a live sheet (shelved)6464 @@ -79,44 +79,44 @@ by a gateway dialing the iroh ticket.
7979 8080 **Engine**8181 82-- Undo and redo for every change, across sheets: [data.md](docs/data.md#undo)83-- Copy, cut, paste and fill with relative and `$absolute` references; insert and delete rows and columns: [data.md](docs/data.md#copy-paste-and-fill)84-- Entries detected as typed (currency, percent, dates, times) and number formats: [formulas.md](docs/formulas.md#what-you-type)85-- Named ranges; several sheets with references between them, hidden sheets: [formulas.md](docs/formulas.md#references)86-- Sheets' everyday, math, text, lookup, date and finance functions, checked against excelize: [functions.md](docs/functions.md), [testing.md](docs/testing.md#the-excelize-oracle)87-- Dynamic arrays that spill (FILTER, SORT, UNIQUE, SEQUENCE and more, ARRAYFORMULA), LET and LAMBDA, SPLIT and the REGEX functions: [formulas.md](docs/formulas.md#arrays-and-spills)88-- Opt-in decimal arithmetic for money: [formulas.md](docs/formulas.md#decimal-arithmetic)89-- An Excel-sized grid with a `max-cells` budget; operations cost the data, not the grid: [limits.md](docs/limits.md#sheet-size)82+- Undo and redo for every change, across sheets: [data.md](docs/sheets/editing.md#undo)83+- Copy, cut, paste and fill with relative and `$absolute` references; insert and delete rows and columns: [data.md](docs/sheets/editing.md#copy-paste-and-fill)84+- Entries detected as typed (currency, percent, dates, times) and number formats: [formulas.md](docs/formulas/README.md#what-you-type)85+- Named ranges; several sheets with references between them, hidden sheets: [formulas.md](docs/formulas/references.md)86+- Sheets' everyday, math, text, lookup, date and finance functions, checked against excelize: [functions.md](docs/reference/functions.md), [testing.md](docs/contributing/testing.md#the-excelize-oracle)87+- Dynamic arrays that spill (FILTER, SORT, UNIQUE, SEQUENCE and more, ARRAYFORMULA), LET and LAMBDA, SPLIT and the REGEX functions: [formulas.md](docs/formulas/arrays.md)88+- Opt-in decimal arithmetic for money: [formulas.md](docs/formulas/decimal.md)89+- An Excel-sized grid with a `max-cells` budget; operations cost the data, not the grid: [limits.md](docs/contributing/limits.md#sheet-size)9090 9191 **Finding and using features**9292 93-- Sheets-structured menus, a command palette and a key for every command: [keys.md](docs/keys.md)94-- Formula suggestions, argument hints and pointing at cells and sheets: [formulas.md](docs/formulas.md#building-formulas)95-- Tracing precedents and dependents, hidden sheets explained: [formulas.md](docs/formulas.md#building-formulas)96-- An optional vim keymap with a `:` command line: [keys.md](docs/keys.md#vim-keys)93+- Sheets-structured menus, a command palette and a key for every command: [keys.md](docs/reference/keys.md)94+- Formula suggestions, argument hints and pointing at cells and sheets: [formulas.md](docs/formulas/building.md)95+- Tracing precedents and dependents, hidden sheets explained: [formulas.md](docs/formulas/building.md)96+- An optional vim keymap with a `:` command line: [keys.md](docs/reference/keys.md#vim-keys)9797 9898 **Data tools**9999 100-- Freeze, multi-column sort, filters with value pickers and conditions: [data.md](docs/data.md#freeze)101-- Find and replace, with regular expressions, across sheets: [data.md](docs/data.md#find-and-replace)102-- Conditional formatting (single-color rules, color scales) and data validation (dropdowns, checkboxes, bounds): [data.md](docs/data.md#conditional-formatting)103-- Pivot tables and frequency tables, live, with subtotals and renamed values: [data.md](docs/data.md#pivot-tables)104-- Notes on cells: [data.md](docs/data.md#notes)105-- Protected sheets and ranges that warn on edit: [data.md](docs/data.md#protected-sheets-and-ranges)106-- Charts (column, bar, line, area, pie, scatter; stacking, trend lines, axis and legend options), as images or text: [charts.md](docs/charts.md)107-- Macros, recorded or written in Starlark: [macros.md](docs/macros.md)108-- JEV functions, with the API key in the OS keychain: [jev.md](docs/jev.md)100+- Freeze, multi-column sort, filters with value pickers and conditions: [data.md](docs/sheets/sort-filter.md#freeze)101+- Find and replace, with regular expressions, across sheets: [data.md](docs/sheets/find-replace.md)102+- Conditional formatting (single-color rules, color scales) and data validation (dropdowns, checkboxes, bounds): [data.md](docs/sheets/rules.md#conditional-formatting)103+- Pivot tables and frequency tables, live, with subtotals and renamed values: [data.md](docs/sheets/pivots.md)104+- Notes on cells: [data.md](docs/sheets/notes-protection.md#notes)105+- Protected sheets and ranges that warn on edit: [data.md](docs/sheets/notes-protection.md#protected-sheets-and-ranges)106+- Charts (column, bar, line, area, pie, scatter; stacking, trend lines, axis and legend options), as images or text: [charts.md](docs/sheets/charts.md)107+- Macros, recorded or written in Starlark: [macros.md](docs/sheets/macros.md)108+- JEV functions, with the API key in the OS keychain: [jev.md](docs/formulas/jev.md)109109 110110 **The terminal**111111 112-- System clipboard, hyperlinks, curly error underlines, cursor shapes, progress and notifications, light and dark: [charts.md](docs/charts.md#terminal-features-012-uses)113-- Color schemes and a config file: [themes.md](docs/themes.md), [config.md](docs/config.md)114-- `012 serve` over SSH, with files on the ssh command line and recovery of unsaved work: [ssh.md](docs/ssh.md)112+- System clipboard, hyperlinks, curly error underlines, cursor shapes, progress and notifications, light and dark: [charts.md](docs/terminal/README.md#terminal-features-012-uses)113+- Color schemes and a config file: [themes.md](docs/terminal/themes.md), [config.md](docs/reference/config.md)114+- `012 serve` over SSH, with files on the ssh command line and recovery of unsaved work: [ssh.md](docs/terminal/ssh.md)115115 116116 **Files**117117 118-- Import CSV, TSV, XLSX, SQLite, Parquet and Lotus `.wk1`; export CSV, TSV, XLSX and SQLite; import locations; save-as and overwrite checks: [files.md](docs/files.md)118+- Import CSV, TSV, XLSX, SQLite, Parquet and Lotus `.wk1`; export CSV, TSV, XLSX and SQLite; import locations; save-as and overwrite checks: [files.md](docs/files/README.md)119119 120120 **Upkeep**121121 122-- `make check` before every push; demo tapes (`make demos`); version tags from v0.1.0: [testing.md](docs/testing.md)122+- `make check` before every push; demo tapes (`make demos`); version tags from v0.1.0: [testing.md](docs/contributing/testing.md)@@ -7,14 +7,14 @@ sidebar_position: 1
77 88 | Section | For |99 |---|---|10-| [Getting started](@/getting-started/README.md) | Installing and running 012, and the screen |11-| [Working with sheets](@/sheets/README.md) | Editing, formatting, sheets, sort and filter, find, rules, pivot tables, notes, charts, macros |12-| [Formulas](@/formulas/README.md) | Entries, references, building formulas, arrays, decimal arithmetic, JEV functions |13-| [Files](@/files/README.md) | Import and download, Excel files, saving, the `.012` format |14-| [The terminal](@/terminal/README.md) | Terminal features, themes, serving over SSH |15-| [Reference](@/reference/README.md) | Keys, functions, configuration, the macro API |16-| [Contributing](@/contributing/README.md) | Architecture, extending, the UX bar, testing, limits, observability |10+| [Getting started](getting-started/README.md) | Installing and running 012, and the screen |11+| [Working with sheets](sheets/README.md) | Editing, formatting, sheets, sort and filter, find, rules, pivot tables, notes, charts, macros |12+| [Formulas](formulas/README.md) | Entries, references, building formulas, arrays, decimal arithmetic, JEV functions |13+| [Files](files/README.md) | Import and download, Excel files, saving, the `.012` format |14+| [The terminal](terminal/README.md) | Terminal features, themes, serving over SSH |15+| [Reference](reference/README.md) | Keys, functions, configuration, the macro API |16+| [Contributing](contributing/README.md) | Architecture, extending, the UX bar, testing, limits, observability |1717 18-The [roadmap](@@/ROADMAP.md) says what's ahead. The docs are Markdown that18+The [roadmap](../ROADMAP.md) says what's ahead. The docs are Markdown that1919 reads on GitHub and builds with Docusaurus: each folder has a2020 `README.md` and a `_category_.json`, and each page front matter.@@ -6,15 +6,15 @@ sidebar_position: 1
66 # Contributing77 88 How 012 is built and the bar every change meets. Start with the rules9-in [CLAUDE.md](@@/CLAUDE.md), then:9+in [CLAUDE.md](../../CLAUDE.md), then:1010 1111 | Page | For |1212 |---|---|13-| [Architecture](@/contributing/architecture.md) | How the engine and UI fit together |14-| [Extending 012](@/contributing/extending.md) | The patterns new features and scale follow |15-| [UX and visual bar](@/contributing/ux.md) | The rules every change follows |16-| [Testing](@/contributing/testing.md) | Unit, end-to-end through libghostty, golden screens, the oracle, docs checks, demos |17-| [Bounds of support](@/contributing/limits.md) | Measured bounds and known bottlenecks |18-| [Observability](@/contributing/observability.md) | Event logs, OTLP export, DuckDB queries, the local telemetry stack |13+| [Architecture](architecture.md) | How the engine and UI fit together |14+| [Extending 012](extending.md) | The patterns new features and scale follow |15+| [UX and visual bar](ux.md) | The rules every change follows |16+| [Testing](testing.md) | Unit, end-to-end through libghostty, golden screens, the oracle, docs checks, demos |17+| [Bounds of support](limits.md) | Measured bounds and known bottlenecks |18+| [Observability](observability.md) | Event logs, OTLP export, DuckDB queries, the local telemetry stack |1919 20-Plans are in the [roadmap](@@/ROADMAP.md).20+Plans are in the [roadmap](../../ROADMAP.md).@@ -128,7 +128,7 @@ style.
128128 - **Functions.** One table (`FuncDef`, in `internal/functions`) holds129129 every function's name, signature, description and arity; it drives130130 parsing, evaluation, autocomplete, in-app help and131- [functions.md](functions.md). See [Functions](#functions).131+ [functions.md](../reference/functions.md). See [Functions](#functions).132132 - **Undo.** Every mutation goes through a small set of paths that snapshot133133 the cells, widths, names, charts, view state and sheet list they change,134134 on any sheet, so a step can be reversed exactly; multi-cell operations@@ -186,7 +186,7 @@ style.
186186 (one file per category: `everyday.go`, `math.go`, `stats.go`,187187 `logic.go`, `text.go`, `regex.go`, `lookup.go`, `dynamic.go`,188188 `lambda.go`, `date.go`, `finance.go`, `link.go`, `jev.go`, which189-[functions.md](functions.md) is grouped by), the evaluation of formulas189+[functions.md](../reference/functions.md) is grouped by), the evaluation of formulas190190 (`eval.go`: operators and calls; arrays in `array.go`, functions mapped191191 over them in `lift.go`, the names LET and LAMBDA bind in `scope.go`), the helpers192192 functions share (arguments and blocks of cells in `args.go`, criteria@@ -295,7 +295,7 @@ move without touching callers:
295295 296296 `internal/ui` is a Bubble Tea program. Inside the grid it follows Google297297 Sheets; around it, the control panel keeps a 1-2-3 look. See298-[UX.md](UX.md) for the rules every change follows.298+[UX.md](ux.md) for the rules every change follows.299299 300300 **Commands.** Every action is a registered command with a title and301301 description (`commands.go`), reached from key bindings, the menu bar,@@ -479,7 +479,7 @@ file names. Everything a model knows lives in the model, so sessions
479479 share nothing but read-only tables (the command and function480480 registries), the process-wide telemetry and, with JEV on, the HTTP481481 client; each gets its own `jev.Cache`, whose queue belongs to that482-session's program. See [ssh.md](ssh.md).482+session's program. See [ssh.md](../terminal/ssh.md).483483 484484 **Unsaved work.** `Server.Shutdown` closes a channel every session485485 watches; a session quitting on it, or on its idle timeout, asks its@@ -504,7 +504,7 @@ config directory; the same directory holds `themes/` and 012 serve's host
504504 key. Every option is one entry in `config.Options`: name, type, default,505505 environment variables, flag, whether Reload config applies it, and a506506 description. Parsing and validation, the flags `cmd/012` accepts, `012507-config`'s listing and default file, and [config.md](config.md)'s507+config`'s listing and default file, and [config.md](../reference/config.md)'s508508 reference (checked by a test) all come from that table. Values are layered defaults < file < environment < flags, each509509 remembering its source; problems are warnings, never fatal. The UI gets a510510 `ui.Settings` (the config, a reload function, the credential store, a JEV@@ -550,7 +550,7 @@ color scheme (`theme.Palette`: VHS's embedded catalog, or a Ghostty,
550550 kitty or VHS JSON file in `themes/`) is drawn by `theme.FromPalette`,551551 which maps each ANSI color to the scheme's, adds full-width bands for the552552 bars and a screen background, and corrects contrast (see553-[themes.md](themes.md)). Bands are applied by `theme.Fill`, one pass over553+[themes.md](../terminal/themes.md)). Bands are applied by `theme.Fill`, one pass over554554 a rendered line's escape sequences that sets the band's colors at the555555 start and after each reset and pads to the width; `View` fills the bar556556 lines before overlays are composited and the whole screen after, so bars@@ -19,12 +19,12 @@ shows it is derived from the table rather than listing it again.
1919 2020 | Registry | Entry | Derived from it |2121 |---|---|---|22-| `functions.FuncDef` (one file per category in `internal/functions`) | a function: name, signature, description, arity, eval, result format, decimal twin | parsing, autocomplete, argument hints, help, [functions.md](functions.md) |22+| `functions.FuncDef` (one file per category in `internal/functions`) | a function: name, signature, description, arity, eval, result format, decimal twin | parsing, autocomplete, argument hints, help, [functions.md](../reference/functions.md) |2323 | `ui.command` | an action: id, title, description, run, enabled, checked, what it edits, and how macros treat it | key bindings (Sheets and vim), menu bar, context menus, palette, shortcuts help, the `:` command line and its completions, macro recording and `run()` in scripts |2424 | `fileio` formats (`formats.go`) | a format: name, extensions, labels, traits, importer, exporter | `Import`, `Export`, detection, import picker, File > Download, command line |2525 | `chart.types`, with `sheet.ChartTypes` | a type: name and order (sheet, saved in files), a layout drawing text and image and the series its legend lists (chart) | `chart.Draw`, `chart.Image`, chart editor, Insert > Chart |2626 | theme roles (`theme.Theme`) | a role: dark and light styles on the 16 ANSI colors, with a contrast minimum for schemes (`minContrast`) | every style in the UI, drawn in the terminal's palette or any color scheme (`FromPalette`); `TestEveryThemeReadable` checks each role under every built-in scheme |27-| `config.Options` | an option: name, type, default, environment variables, flag, live or not, description, check | parsing and warnings, flags, `012 config` and its default file, [config.md](config.md), Reload config |27+| `config.Options` | an option: name, type, default, environment variables, flag, live or not, description, check | parsing and warnings, flags, `012 config` and its default file, [config.md](../reference/config.md), Reload config |2828 2929 Adding a function, command, format, chart type, option or role means3030 adding an entry (and its file), not editing switch statements elsewhere.@@ -30,7 +30,7 @@ O12_LOG_LEVEL=debug # also one event per frame
3030 OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 012 budget.012 # the same3131 ```3232 33-Or keep them in the [config file](config.md) as `log-file`, `log-level`33+Or keep them in the [config file](../reference/config.md) as `log-file`, `log-level`3434 and `otlp-endpoint`; flags win over the environment, which wins over the3535 file.3636 @@ -108,20 +108,20 @@ shows go there, and GIFs stay under 1 MB.
108108 ## Docs109109 110110 `make lint` runs `scripts/doclint`, which flags wording that narrates111-history (see [CLAUDE.md](../CLAUDE.md)), and `scripts/doccheck`: relative112-links and anchors resolve, [docs/README.md](README.md) links every doc,111+history (see [CLAUDE.md](../../CLAUDE.md)), and `scripts/doccheck`: relative112+links and anchors resolve, [docs/README.md](../README.md) links every doc,113113 every file in `docs/media` is shown by a doc and made by a tape, and114114 every tape records something a doc shows. Unit tests check what the docs115115 say about the code: menu paths lead to menu items, command ids and keys116-exist and every bound key is in [keys.md](keys.md)116+exist and every bound key is in [keys.md](../reference/keys.md)117117 (`internal/ui/docs_test.go`), settings and variables are options118-(`internal/config/docs_test.go`), and [files.md](files.md) names every118+(`internal/config/docs_test.go`), and [files.md](../files/README.md) names every119119 field of the format (`internal/sheet/file_doc_test.go`).120-[functions.md](functions.md) and [config.md](config.md)'s reference are120+[functions.md](../reference/functions.md) and [config.md](../reference/config.md)'s reference are121121 generated, and their tests fail when they're stale.122122 123123 ## No broken windows124124 125125 `make check` must pass before a push, and warnings are fixed or turned126126 off with a written reason rather than left standing. The rules are in127-[CLAUDE.md](../CLAUDE.md).127+[CLAUDE.md](../../CLAUDE.md).@@ -50,7 +50,7 @@ follow-up task.
5050 `lipgloss.NewStyle()` in views. Need a new role? Add it to `theme` with a5151 comment saying what it's for, in both the dark and light variants.5252 - Use the 16 ANSI colors so the user's terminal palette applies. No53- hard-coded RGB. Color schemes ([themes.md](themes.md)) are data: they53+ hard-coded RGB. Color schemes ([themes.md](../terminal/themes.md)) are data: they5454 map the same roles to their colors and correct contrast, and5555 `TestEveryThemeReadable` must pass for a new role.5656 - Bars (menu bar, formula bar, context line, column headers, status line)@@ -91,7 +91,7 @@ follow-up task.
9191 committing. Screens are drawn from libghostty's cell grid, so they9292 match what a terminal shows.9393 - [ ] The feature's doc updated in place, where a reader looks for it,94- and its keys in [keys.md](keys.md) (tests check every bound key is94+ and its keys in [keys.md](../reference/keys.md) (tests check every bound key is9595 there); a headline feature gets a tape in `demos/` and a place in9696 the README ([testing.md](testing.md#demo-recordings)).9797 @@ -10,7 +10,7 @@ sheet in one file. Other formats come in through File > Import, File >
1010 Open or the command line (`012 sales.xlsx`), and go out through File >1111 Download.1212 13-13+1414 1515 ## Import and download1616 @@ -21,7 +21,7 @@ it back in its format.
2121 | Format | Import | Download |2222 |---|---|---|2323 | CSV, TSV | Delimiter (`,` `;` tab `\|`), UTF-8 BOM, UTF-16 and Windows-1252 detected; entries become numbers, dates, currency and percentages as if typed; formulas stay text | Values as shown, of the sheet shown, as Sheets' Download does; a selection of whole columns or rows downloads their data, not a million blank lines |24-| Excel `.xlsx` | Every sheet, with formulas, formats and most of what a sheet holds: see [Excel files](#excel-files) | The same |24+| Excel `.xlsx` | Every sheet, with formulas, formats and most of what a sheet holds: see [Excel files](excel.md) | The same |2525 | SQLite | Pick a table or view, or type a query; a header row names the columns | The sheet shown or the selection as a table, first row as column names; a table of that name is replaced |2626 | Parquet | Every column, with dates and timestamps; lists joined with commas | |2727 | Lotus 1-2-3 `.wk1`, `.wks` | Numbers, labels with their alignment, formats, column widths, formulas translated (references, operators, `@SUM`, `@AVG`, `@IF`, `@ROUND`, `@PMT` and 60 more) or kept as values | |@@ -48,17 +48,17 @@ line lists the removed charts first, then which were re-pointed and
4848 which kept their range, and undo brings the removed ones back.4949 5050 **Size.** A sheet is 1,048,576 rows by 16,384 columns (A to XFD), as in51-Excel. Imports keep at most `max-cells` cells ([config.md](config.md#max-cells),51+Excel. Imports keep at most `max-cells` cells ([config.md](../reference/config.md#max-cells),5252 two million by default, about 600 MB): whole rows, as many as fit, and5353 the context line says how many rows were left out, e.g. `only the first5454 166,666 rows fit in max-cells (2,000,000 cells); 12,000 rows left out`.5555 Data past the grid's edges is left out the same way. WK1 files keep their56-own 8,192 by 256. See [limits.md](limits.md#imports) for speeds.56+own 8,192 by 256. See [limits.md](../contributing/limits.md#imports) for speeds.5757 5858 ## More5959 6060 | Page | For |6161 |---|---|62-| [Excel files](@/files/excel.md) | What comes in from and goes out to `.xlsx` |63-| [Saving](@/files/saving.md) | Atomic saves, overwrite checks, unsaved work under `012 serve` |64-| [The .012 format](@/files/format.md) | The JSON format, its versions and fields |62+| [Excel files](excel.md) | What comes in from and goes out to `.xlsx` |63+| [Saving](saving.md) | Atomic saves, overwrite checks, unsaved work under `012 serve` |64+| [The .012 format](format.md) | The JSON format, its versions and fields |@@ -60,7 +60,7 @@ opposed to the sheet's AutoFilter) aren't read.
6060 6161 ## Arrays in Excel6262 63-A formula whose array spills (see [formulas.md](formulas.md#arrays-and-spills))63+A formula whose array spills (see [formulas.md](../formulas/arrays.md))6464 is written as Excel writes a dynamic array formula: an array formula over6565 the cells it spills into (`<f t="array" ref="C1:C9">`) on a cell whose6666 metadata marks it dynamic (`cm="1"`, defined in `xl/metadata.xml`), with@@ -82,8 +82,8 @@ formula.
8282 8383 ## Rules in Excel8484 85-[Conditional formats](data.md#conditional-formatting) go out as Excel's86-conditional formatting, and [data validation](data.md#data-validation)85+[Conditional formats](../sheets/rules.md#conditional-formatting) go out as Excel's86+conditional formatting, and [data validation](../sheets/rules.md#data-validation)8787 as its data validation, and both come back:8888 8989 | Conditional format | Excel |@@ -24,7 +24,7 @@ object:
2424 ```2525 2626 A formatted cell has its `input` and the formatting that isn't the27-default: `format` (as `number_format` in [macros](macros.md#cells) names27+default: `format` (as `number_format` in [macros](../reference/macro-api.md#cells) names2828 it: `currency`, `percent`, `date`, ...), `decimals`, `pattern` for a2929 custom format, `bold`, `italic`, `underline`, `strikethrough` and3030 `align` (`left`, `center`, `right`).@@ -50,19 +50,19 @@ save), so they raise no version:
5050 5151 | Field | On | Holds |5252 |---|---|---|53-| `note` | a cell | Its [note](data.md#notes) |53+| `note` | a cell | Its [note](../sheets/notes-protection.md#notes) |5454 | `own` | a cell | `true` when its formatting is its own, not its column's or row's (Automatic in a currency column) |5555 | `lines` | a sheet | [Column and row formats](#column-and-row-formats) |5656 | `name`, `hidden` | a sheet | Its name when renamed; `true` when hidden (a file whose sheets are all hidden opens with the first one shown) |5757 | `charts` | a sheet | One chart per line: `type` (`column`, `bar`, `line`, `pie`, `area`, `scatter`), `data`, `at`, `width`, `height`, `byRow`, `header`, `labels`, `title`, and options left out at their defaults: `stack` (`stacked`, `percent`), `trend`, `min`, `max`, `log`, `gridlines` (only when off), `legend` (`right`, `none`). A build that charts but lacks a chart's type refuses the file |58-| `protected` | a sheet | [Protected ranges](data.md#protected-sheets-and-ranges): `{"range":"B2:C9","description":"Totals"}`, or `{"sheet":true}` |58+| `protected` | a sheet | [Protected ranges](../sheets/notes-protection.md#protected-sheets-and-ranges): `{"range":"B2:C9","description":"Totals"}`, or `{"sheet":true}` |5959 | `conditionalFormats`, `validations` | a sheet | [Rules](#conditional-formats-and-data-validation), one per line |60-| `arithmetic` | the workbook | `decimal` for [decimal arithmetic](formulas.md#decimal-arithmetic) |61-| `macros`, `macroOrigin` | the workbook | Macros as Starlark scripts, and the computer they were made or trusted on: see [macros.md](macros.md#in-the-file). Opening a file never runs them |60+| `arithmetic` | the workbook | `decimal` for [decimal arithmetic](../formulas/decimal.md) |61+| `macros`, `macroOrigin` | the workbook | Macros as Starlark scripts, and the computer they were made or trusted on: see [macros.md](../reference/macro-api.md#in-the-file). Opening a file never runs them |6262 6363 ## Column and row formats6464 65-[Formats of whole columns and rows](data.md#rows-and-columns) are kept65+[Formats of whole columns and rows](../sheets/editing.md#rows-and-columns) are kept6666 in a `lines` field after the widths, runs of lines with the same6767 formatting together; `A:XFD` is the whole sheet's format:6868 @@ -7,7 +7,7 @@ sidebar_position: 3
77 88 Saves are atomic: 012 writes a temporary file and renames it. Saving over99 the open file when something else wrote it since it was opened or last10-saved (another program, or another session of [012 serve](ssh.md)) asks10+saved (another program, or another session of [012 serve](../terminal/ssh.md)) asks1111 first: Enter overwrites, S saves under another name, Esc cancels. Save1212 as (and `:w name`, `:wq name` with vim keys) onto another file that1313 exists asks the same way: Enter replaces it, Esc cancels, and cancelling@@ -16,4 +16,4 @@ exists asks the same way: Enter replaces it, Esc cancels, and cancelling
1616 Under `012 serve`, a session that idles out or is ended by the server1717 stopping keeps its unsaved changes in `.012-recovery/` in the served1818 directory, and the next session opening that file offers them back: see19-[ssh.md](ssh.md#unsaved-work).19+[ssh.md](../terminal/ssh.md#unsaved-work).@@ -66,9 +66,9 @@ numbers as numbers.
6666 6767 | Page | For |6868 |---|---|69-| [References](@/formulas/references.md) | Cells, ranges, names, other sheets, and a range where one value is wanted |70-| [Building formulas](@/formulas/building.md) | Pointing, suggestions, argument hints, tracing |71-| [Arrays and spills](@/formulas/arrays.md) | FILTER, SORT, UNIQUE, SEQUENCE, ARRAYFORMULA, LET and LAMBDA |72-| [Decimal arithmetic](@/formulas/decimal.md) | Exact decimal math for money |73-| [JEV functions](@/formulas/jev.md) | Asking a hosted model from formulas |74-| [Functions](@/reference/functions.md) | Every function, generated from the engine |69+| [References](references.md) | Cells, ranges, names, other sheets, and a range where one value is wanted |70+| [Building formulas](building.md) | Pointing, suggestions, argument hints, tracing |71+| [Arrays and spills](arrays.md) | FILTER, SORT, UNIQUE, SEQUENCE, ARRAYFORMULA, LET and LAMBDA |72+| [Decimal arithmetic](decimal.md) | Exact decimal math for money |73+| [JEV functions](jev.md) | Asking a hosted model from formulas |74+| [Functions](../reference/functions.md) | Every function, generated from the engine |@@ -12,7 +12,7 @@ file, every sheet of it, to decimal math for money. The status line then says
1212 `decimal`, the menu shows a check mark, and the setting is saved with the1313 file and can be undone.1414 15-15+1616 1717 | Computed in decimal | Stays binary |1818 |---|---|@@ -73,7 +73,7 @@ key would come from, without showing it.
7373 The service's address and model come from the config file or the7474 environment only: `jev-base-url` (or `TYPESAFE_BASE_URL`), which must be7575 https unless it's this machine, and `jev-model` (or76-`TYPESAFE_DEFAULT_MODEL`). See [config.md](config.md).76+`TYPESAFE_DEFAULT_MODEL`). See [config.md](../reference/config.md).7777 7878 **012 doesn't read `.env` files.** A `.env` next to a downloaded sheet7979 could set `TYPESAFE_BASE_URL` and send your key to someone else's server.@@ -28,7 +28,7 @@ sidebar_position: 2
2828 - Each sheet is 16,384 columns (A to XFD) by 1,048,576 rows, Excel's size;2929 a reference past them (`XFE1`, `A1048577`) reads as a name. Formulas cost3030 what their ranges hold, not their size: `SUM(A:A)` over ten numbers reads31- ten cells, and `ROWS(A:A)` is still 1,048,576. See [limits.md](limits.md)31+ ten cells, and `ROWS(A:A)` is still 1,048,576. See [limits.md](../contributing/limits.md)3232 for what that means in practice.3333 3434 ## A range where one value is wanted@@ -49,7 +49,7 @@ in Sheets and Excel (implicit intersection):
4949 Ranges on other sheets work the same, by the formula's row or column:5050 `='Q3 plan'!C2:C9*10` in A3 reads `'Q3 plan'!C3`. A range that is a5151 cell's whole formula, `=B2:B4` or `=Rent`, is an array and spills, as in52-Sheets (see [Arrays and spills](#arrays-and-spills)). Functions that52+Sheets (see [Arrays and spills](arrays.md)). Functions that5353 take ranges (`SUM`, `COUNTIF`, `MATCH`, `VLOOKUP`, `SUMPRODUCT` and the5454 like) read the whole range, and an expression given to them is computed5555 over arrays: `SUM(B2:B4*2)` doubles each cell and adds them.@@ -8,14 +8,14 @@ sidebar_position: 1
88 012 is a spreadsheet for the terminal: Google Sheets' behavior inside99 the grid, Lotus 1-2-3's look around it.1010 11-11+1212 13-1. [Install and run](@/getting-started/install.md) 012.13+1. [Install and run](install.md) 012.1414 2. Type into cells as in Sheets: text, numbers, `$1,200`, `12%`, dates,15- and formulas starting with `=` ([formulas](@/formulas/README.md)).15+ and formulas starting with `=` ([formulas](../formulas/README.md)).1616 Enter and Tab accept and move on.17-3. [The screen](@/getting-started/the-screen.md) says what's going on: the mode indicator,17+3. [The screen](the-screen.md) says what's going on: the mode indicator,1818 the formula bar and the context line, which shows the keys that apply.1919 4. F1 lists every shortcut, F10 or Alt+letter opens the menus, and20- Ctrl+K searches every command. The [keys](@/reference/keys.md) page20+ Ctrl+K searches every command. The [keys](../reference/keys.md) page2121 has them all, and the vim keymap.@@ -20,11 +20,11 @@ go install github.com/FelineStateMachine/012/cmd/012@latest
2020 ```2121 2222 A file on the command line opens as File > Open would: a `.012` sheet, or23-another format imported ([files](@/files/README.md)). `012 serve` is24-described in [Serving over SSH](@/terminal/ssh.md).23+another format imported ([files](../files/README.md)). `012 serve` is24+described in [Serving over SSH](../terminal/ssh.md).2525 2626 `012 config` prints the settings in effect and `012 config edit` opens the27-settings file ([configuration](@/reference/config.md)). 012 draws in your28-terminal's own colors by default; [themes](@/terminal/themes.md) says29-how to pick a color scheme. The [terminal](@/terminal/README.md) page27+settings file ([configuration](../reference/config.md)). 012 draws in your28+terminal's own colors by default; [themes](../terminal/themes.md) says29+how to pick a color scheme. The [terminal](../terminal/README.md) page3030 lists which terminal features 012 uses where they're available.@@ -7,7 +7,7 @@ sidebar_position: 1
77 88 | Page | Lists |99 |---|---|10-| [Keys and mouse](@/reference/keys.md) | Every shortcut, the vim keymap and the mouse |11-| [Functions](@/reference/functions.md) | Every function, generated from the engine |12-| [Configuration](@/reference/config.md) | The config file, `012 config` and every option, generated from the registry |13-| [Macro scripting API](@/reference/macro-api.md) | The functions and command ids macros can use |10+| [Keys and mouse](keys.md) | Every shortcut, the vim keymap and the mouse |11+| [Functions](functions.md) | Every function, generated from the engine |12+| [Configuration](config.md) | The config file, `012 config` and every option, generated from the registry |13+| [Macro scripting API](macro-api.md) | The functions and command ids macros can use |@@ -40,7 +40,7 @@ win over the config file, which wins over the defaults. `012 config` shows
4040 where each value came from.4141 4242 **Secrets never go in this file.** The JEV API key lives in the OS43-credential store or comes from a command; see [JEV setup](jev.md#setup).43+credential store or comes from a command; see [JEV setup](../formulas/jev.md#setup).4444 4545 ## Commands4646 @@ -57,7 +57,7 @@ credential store or comes from a command; see [JEV setup](jev.md#setup).
5757 In the app, File > Settings has **Theme** (a picker with live preview),5858 **Open config file** (in your editor, reloading when it closes),5959 **Reload config** and **JEV API key** (stored, then checked with one test60-call: see [jev.md](jev.md#setup)). Reloading applies the options marked60+call: see [jev.md](../formulas/jev.md#setup)). Reloading applies the options marked6161 "File > Settings > Reload config" below; the rest take effect on the next6262 start.6363 @@ -28,7 +28,7 @@ mouse and the vim keymap added.
2828 2929 | Key | Action |3030 |---|---|31-| 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)) |31+| 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/README.md#what-you-type)) |3232 | Enter, Tab | Accept and move down or right; Enter goes back to the column a run of Tabs began in |3333 | Enter, F2, double-click | Edit the cell |3434 | Esc | Cancel the entry |@@ -58,7 +58,7 @@ mouse and the vim keymap added.
5858 | Ctrl+D, Ctrl+R | Fill down, fill right; a series started in the top rows (1, 2 over blanks) continues |5959 | Ctrl+Alt+=, Ctrl+Alt+- | Insert rows above, delete the selected rows (columns when whole columns are selected) |6060 61-[data.md](data.md#copy-paste-and-fill) says how formats travel with61+[data.md](../sheets/editing.md#copy-paste-and-fill) says how formats travel with6262 copies and which series the fill handle continues.6363 6464 ## Formatting@@ -89,20 +89,20 @@ The rest of the formats are in the Format menu.
8989 9090 | Key | Action | More |9191 |---|---|---|92-| Ctrl+F, Ctrl+H | Find; find and replace | [data.md](data.md#find-and-replace) |93-| Alt+Down | Open the active cell's dropdown (type to search, Enter picks); elsewhere, with a filter on (Data > Create a filter), the column's filter (Space checks values, type to search, or pick a condition) | [validation](data.md#data-validation), [filter](data.md#filter) |94-| Space | Check or uncheck the selected checkboxes (Insert > Checkbox); elsewhere Space starts an entry | [data.md](data.md#data-validation) |95-| 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) |96-| Alt+Shift+F | Frequency table of the active column on a new sheet, as VisiData's Shift+F | [data.md](data.md#frequency-tables) |97-| 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+| Ctrl+F, Ctrl+H | Find; find and replace | [data.md](../sheets/find-replace.md) |93+| Alt+Down | Open the active cell's dropdown (type to search, Enter picks); elsewhere, with a filter on (Data > Create a filter), the column's filter (Space checks values, type to search, or pick a condition) | [validation](../sheets/rules.md#data-validation), [filter](../sheets/sort-filter.md#filter) |94+| Space | Check or uncheck the selected checkboxes (Insert > Checkbox); elsewhere Space starts an entry | [data.md](../sheets/rules.md#data-validation) |95+| 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/building.md) |96+| Alt+Shift+F | Frequency table of the active column on a new sheet, as VisiData's Shift+F | [data.md](../sheets/pivots.md#frequency-tables) |97+| Shift+F2 | Add or edit the active cell's note; Alt+Enter or Shift+Enter starts a new line | [data.md](../sheets/notes-protection.md#notes) |9898 9999 Tools with no key of their own have their keys on screen while they're100100 open, and in their docs: sorting by several columns101-([data.md](data.md#sort)), conditional formatting and data validation102-([rules panel](data.md#conditional-formatting)), pivot tables103-([pivot editor](data.md#pivot-tables)), protected ranges104-([data.md](data.md#protected-sheets-and-ranges)) and charts105-([charts.md](charts.md)). In Data > Named ranges, Enter goes to a101+([data.md](../sheets/sort-filter.md#sort)), conditional formatting and data validation102+([rules panel](../sheets/rules.md#conditional-formatting)), pivot tables103+([pivot editor](../sheets/pivots.md)), protected ranges104+([data.md](../sheets/notes-protection.md#protected-sheets-and-ranges)) and charts105+([charts.md](../sheets/charts.md)). In Data > Named ranges, Enter goes to a106106 range, F2 renames or repoints it and Ctrl+D deletes it.107107 108108 ## Files, menus and help@@ -119,7 +119,7 @@ range, F2 renames or repoints it and Ctrl+D deletes it.
119119 120120 | Key | Action |121121 |---|---|122-| Ctrl+Alt+Shift+0 to 9 | Run the macro with that shortcut ([macros.md](macros.md#running)) |122+| Ctrl+Alt+Shift+0 to 9 | Run the macro with that shortcut ([macros.md](../sheets/macros.md#running)) |123123 | Esc | Stop a macro while it runs (the mode indicator says CMD) |124124 125125 ## Vim keys@@ -137,7 +137,7 @@ Ctrl+D, Ctrl+U and Ctrl+R are vim's, so fill down and fill right are in
137137 the Edit menu. F1 lists the vim keys first, and the menus and palette138138 show them where Sheets' keys are taken.139139 140-140+141141 142142 | Keys (NORMAL) | Action |143143 |---|---|@@ -5,7 +5,7 @@ sidebar_position: 5
55 66 # Macro scripting API77 8-What a [macro](@/sheets/macros.md) script can do. Recorded macros use8+What a [macro](../sheets/macros.md) script can do. Recorded macros use99 the same functions, so recording one is a quick way to see them.1010 1111 A script runs from top to bottom. It's Starlark: Python's syntax@@ -99,7 +99,7 @@ menus, help, undo or macros. The ids are those in the recorded scripts; a few:
9999 | `column.width` (answer: the width), `column.reset` | Column widths |100100 | `data.sort_sheet_az`, `data.sort_range_az`, `data.sort_range_za`, `data.filter`, `data.filter_remove` | Sorting and filters |101101 | `data.define_name` (answer: the name) | Name the selection |102-| `format.conditional_add`, `data.validation_add` (answer: the rule as a line of the file, see [files.md](files.md#conditional-formats-and-data-validation)), `insert.checkbox`, `format.conditional_clear`, `data.validation_clear`, `data.checkbox_toggle` | Conditional formats, data validation and checkboxes |102+| `format.conditional_add`, `data.validation_add` (answer: the rule as a line of the file, see [files.md](../files/format.md#conditional-formats-and-data-validation)), `insert.checkbox`, `format.conditional_clear`, `data.validation_clear`, `data.checkbox_toggle` | Conditional formats, data validation and checkboxes |103103 | `sheet.new`, `sheet.duplicate`, `sheet.rename` (answer: the name), `sheet.delete` (answer: `"enter"` when it asks), `sheet.hide`, `sheet.unhide` (answer: the sheet's name) | Sheets |104104 | `view.freeze_rows1`, `view.freeze_cols1`, `view.freeze_rows0`, ... | Frozen panes |105105 @@ -8,17 +8,17 @@ sidebar_position: 1
88 How to change what a sheet holds and how it looks, and the tools for99 working with its data.1010 11-11+1212 1313 | Page | For |1414 |---|---|15-| [Editing](@/sheets/editing.md) | Selecting, copy and paste, fill, undo, rows and columns, links |16-| [Formatting](@/sheets/formatting.md) | Number formats, text styles, column and row formats, widths |17-| [Sheets and tabs](@/sheets/sheets-and-tabs.md) | Several sheets: adding, moving, hiding |18-| [Freeze, sort and filter](@/sheets/sort-filter.md) | Keeping headers on screen, sorting, filtering by values or conditions |19-| [Find and replace](@/sheets/find-replace.md) | Searching one sheet, all of them or a range |20-| [Conditional formatting and data validation](@/sheets/rules.md) | Coloring cells by their values; dropdowns, checkboxes and entry rules |21-| [Pivot tables](@/sheets/pivots.md) | Summaries of a table on a sheet of their own, and frequency tables |22-| [Notes and protection](@/sheets/notes-protection.md) | Notes on cells; ranges that warn before an edit |23-| [Charts](@/sheets/charts.md) | Charts that float over the grid |24-| [Macros](@/sheets/macros.md) | Recording and running what you do |15+| [Editing](editing.md) | Selecting, copy and paste, fill, undo, rows and columns, links |16+| [Formatting](formatting.md) | Number formats, text styles, column and row formats, widths |17+| [Sheets and tabs](sheets-and-tabs.md) | Several sheets: adding, moving, hiding |18+| [Freeze, sort and filter](sort-filter.md) | Keeping headers on screen, sorting, filtering by values or conditions |19+| [Find and replace](find-replace.md) | Searching one sheet, all of them or a range |20+| [Conditional formatting and data validation](rules.md) | Coloring cells by their values; dropdowns, checkboxes and entry rules |21+| [Pivot tables](pivots.md) | Summaries of a table on a sheet of their own, and frequency tables |22+| [Notes and protection](notes-protection.md) | Notes on cells; ranges that warn before an edit |23+| [Charts](charts.md) | Charts that float over the grid |24+| [Macros](macros.md) | Recording and running what you do |@@ -14,7 +14,7 @@ select whole columns and rows. The active cell stays distinct from the rest
1414 of the selection, and the status line shows Sum, Avg and Count, dropping the1515 ones that don't fit on a narrow terminal.1616 17-17+1818 1919 ## Copy, paste and fill2020 @@ -7,9 +7,9 @@ sidebar_position: 3
77 88 Formats change how values show, never what they are. Select cells,99 whole columns or rows, then pick a format from the Format menu, a key10-([keys](@/reference/keys.md#formatting)) or the palette. Entries such as10+([keys](../reference/keys.md#formatting)) or the palette. Entries such as1111 `$1,200`, `12%` or `9/26/2026` take their format as you type them12-([formulas](@/formulas/README.md#what-you-type)).12+([formulas](../formulas/README.md#what-you-type)).1313 1414 ## Number formats1515 @@ -33,7 +33,7 @@ Format > Number, as Sheets names them:
3333 3434 Format > Increase and Decrease decimal places show one more or one less.3535 A formula left Automatic shows the format of what it reads36-([building formulas](@/formulas/building.md)).36+([building formulas](../formulas/building.md)).3737 3838 ## Text3939 @@ -51,7 +51,7 @@ cell of it shows the format unless it has its own, and a cell typed into
5151 later takes it. A cell's format comes from the cell, else its row, else5252 its column, else the whole sheet's (Ctrl+A twice, then a format); the5353 number format and the text style fall back separately. Copies carry what54-cells show ([editing](@/sheets/editing.md#copy-paste-and-fill)).54+cells show ([editing](editing.md#copy-paste-and-fill)).5555 5656 ## Column widths5757 @@ -60,4 +60,4 @@ Drag a column header's right edge, or use Format > Column width (1 to
6060 Reset column width goes back to the default.6161 6262 Conditional formats, which color cells by their values, are on63-[their own page](@/sheets/rules.md).63+[their own page](rules.md).@@ -12,7 +12,7 @@ script (a small, deterministic dialect of Python) saved in the `.012`
1212 file, as Sheets saves Apps Script with a spreadsheet. Recorded macros are1313 scripts too, so you can read them, change them, or write your own.1414 15-15+1616 1717 ## Recording1818 @@ -114,7 +114,7 @@ and mark the file modified, like any edit.
114114 115115 Opening a file never runs its macros. The file remembers which computer116116 its macros were made or trusted on (a random id kept in 012's117-config directory, the one [config.md](config.md) describes). Running117+config directory, the one [config.md](../reference/config.md) describes). Running118118 a macro from a file made elsewhere asks once, on the context line:119119 120120 ```@@ -130,4 +130,4 @@ read the clock or random numbers: all they can reach is the functions
130130 below. What a macro can do is what you could do with the keyboard in that131131 workbook, which is why it asks before running someone else's.132132 133-Macros are Starlark scripts you can read and write: the [scripting API](@/reference/macro-api.md) lists what they can do.133+Macros are Starlark scripts you can read and write: the [scripting API](../reference/macro-api.md) lists what they can do.@@ -5,7 +5,7 @@ sidebar_position: 8
55 66 # Pivot tables77 8-8+99 1010 Data > Pivot table summarizes the selection, or the table around the1111 active cell, on a new sheet named `Pivot Table 1`, as Sheets' Insert >@@ -15,7 +15,7 @@ Left/Right change a choice, Space flips a check, text lines are typed
1515 into, Enter saves and Esc goes back without saving. Every change is an1616 undo step.1717 18-18+1919 2020 A rule applies to ranges (`A2:A100`, or several: `A2:A9,C2:C9`) and is2121 one of:@@ -41,7 +41,7 @@ over a rule's colors; its text styles show through them.
4141 4242 Colors are named (red, yellow, green, cyan, blue, magenta) rather than4343 picked from a color wheel, because each is one of the terminal's 16 ANSI44-colors: the terminal's palette or the color scheme ([themes.md](themes.md))44+colors: the terminal's palette or the color scheme ([themes.md](../terminal/themes.md))4545 decides what they look like, and a fill's text is drawn in whichever of4646 black or white reads on it. A text color that wouldn't read on a rule's4747 fill takes the fill's ink instead. Color scales blend the scheme's colors@@ -94,4 +94,4 @@ selection out of every rule.
9494 9595 Adding a checkbox or a dropdown changes no cells, so on a protected range9696 it doesn't ask first (on a protected sheet it does); checking a box or97-picking an item asks as typing does ([protection](#protected-sheets-and-ranges)).97+picking an item asks as typing does ([protection](notes-protection.md#protected-sheets-and-ranges)).@@ -7,7 +7,7 @@ sidebar_position: 4
77 88 A spreadsheet holds several sheets, shown as tabs at the left of the99 status line (as tmux lists its windows). Formulas read other sheets by10-name, `=Sheet2!A1` ([references](@/formulas/references.md)).10+name, `=Sheet2!A1` ([references](../formulas/references.md)).1111 1212 | To | Do |1313 |---|---|@@ -11,8 +11,8 @@ colors that follow light and dark.
1111 1212 | Page | For |1313 |---|---|14-| [Themes](@/terminal/themes.md) | Your terminal's colors, a built-in scheme, or your own |15-| [Serving over SSH](@/terminal/ssh.md) | `012 serve`: a 012 per session, on one directory |14+| [Themes](themes.md) | Your terminal's colors, a built-in scheme, or your own |15+| [Serving over SSH](ssh.md) | `012 serve`: a 012 per session, on one directory |1616 1717 ## Terminal features 012 uses1818 @@ -10,7 +10,7 @@ the client's own terminal, on the files of one directory. It's for
1010 reaching your sheets from another machine or a tablet with an SSH app,1111 without installing anything there. It is not shared editing: two1212 sessions are two separate spreadsheets (see13-[the roadmap](../ROADMAP.md#later-sharing-a-live-sheet-shelved)).13+[the roadmap](../../ROADMAP.md#later-sharing-a-live-sheet-shelved)).1414 1515 ```sh1616 012 serve ~/sheets # serve ~/sheets on 127.0.0.1:2312@@ -38,7 +38,7 @@ there's no command.
3838 | `--host-key` | `<config dir>/012/ssh_host_ed25519_key` | The server's key, generated on first run |3939 | `--idle-timeout` | `30m` | End a session after this long without input, keeping its unsaved changes; `0` never does |4040 | `--max-sessions` | `8` | Sessions at once; more are turned away with a message |41-| `--log`, `--otlp` | off | Telemetry, as for the app ([observability.md](observability.md)) |41+| `--log`, `--otlp` | off | Telemetry, as for the app ([observability.md](../contributing/observability.md)) |4242 4343 The config directory is `os.UserConfigDir()`: `~/Library/Application4444 Support` on macOS, `~/.config` on Linux. On start, 012 prints the served@@ -142,7 +142,7 @@ client: the window size and its changes, the colors (from the `TERM`
142142 the client sends), the light or dark background, kitty graphics, and143143 the clipboard, which Ctrl+C sets on the client's machine through OSC 52.144144 145-[Macros](macros.md) can be recorded, run, renamed and deleted in a145+[Macros](../sheets/macros.md) can be recorded, run, renamed and deleted in a146146 session, but not edited as scripts: that would start an editor on the147147 server. A file's macros ask for trust once per session, since the148148 session isn't the server's own computer, and scripts have no file,@@ -194,4 +194,4 @@ check protects the local app from other programs writing the file.
194194 300 B per cell of the sheets it opens; two sessions opening one file195195 hold two copies. With 50 sessions typing at once on loopback, frames196196 still arrive within one frame interval (p95 16.6 ms), the same as with197- 10: see [limits.md](limits.md#serving-over-ssh).197+ 10: see [limits.md](../contributing/limits.md#serving-over-ssh).@@ -38,7 +38,7 @@ writes `theme = ...` to the config file, and Esc goes back to the theme you
3838 had. With a `light:`/`dark:` pair, the picker changes the one in use.3939 `012 config themes` lists every theme, with a `*` on the current one.4040 41-41+4242 4343 ## Built-in schemes4444 @@ -100,7 +100,7 @@ for cell text, text on the bars, the selection, the headers and every
100100 other role (`TestEveryThemeReadable`). Charts, as text and as kitty101101 images, use the scheme's colors too.102102 103-Conditional formats ([data.md](data.md#conditional-formatting)) name103+Conditional formats ([data.md](../sheets/rules.md#conditional-formatting)) name104104 their colors (red, yellow, green, cyan, blue, magenta) rather than105105 giving RGB, and each is an ANSI slot, so they follow the theme too: a106106 text color is the slot on the cell (`RuleText`), a fill the slot as a@@ -125,6 +125,6 @@ terminal theme leaves them empty, so it looks as it always has.
125125 ## Credits126126 127127 The built-in schemes are VHS's `themes.json` (MIT License, Copyright (c)128-2022-2023 Charmbracelet, Inc.; see [NOTICE](../NOTICE)), which credits128+2022-2023 Charmbracelet, Inc.; see [NOTICE](../../NOTICE)), which credits129129 each scheme's authors in its `meta.credits`. The contrast correction is130130 adapted from the theme package of puzzletea, by the same author.