[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1265":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":14,"lastSyncTime":33,"discoverSource":34},1265,"cell","garritfra\u002Fcell","garritfra","A fast terminal spreadsheet editor with Vim keybindings","",null,"Rust",302,6,2,19,0,1,4,24,3,2.54,"MIT License",false,"main",[26,27,28,29],"rust","spreadsheet","spreadsheets","vim","2026-06-12 02:00:25","# cell\n\nA terminal spreadsheet editor with Vim keybindings, written in Rust.\n\n![cell screenshot](assets\u002Fcell.png)\n\n## Install\n\nFrom [crates.io](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fcell-sheet-tui):\n\n```sh\ncargo install cell-sheet-tui\n```\n\nPre-built binaries for Linux, macOS, and Windows are available on the [GitHub Releases](https:\u002F\u002Fgithub.com\u002Fgarritfra\u002Fcell\u002Freleases) page.\n\n### Build from source\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002Fgarritfra\u002Fcell.git\ncd cell\ncargo build --release\n# Binary at target\u002Frelease\u002Fcell\n```\n\n## Usage\n\n```sh\ncell                          # empty sheet\ncell data.csv                 # open CSV\ncell data.tsv                 # open TSV\ncell sheet.cell               # open native format\ncell data.psv --delimiter '|' # open with a custom field delimiter\ncat data.csv | cell           # read from stdin (pipe input)\n```\n\nTo explore an example sheet with formulas, ranges, and IF logic:\n\n```sh\ncell examples\u002Fdemo.cell\n```\n\nThe CSV\u002FTSV delimiter is auto-detected from file content; pass\n`--delimiter` to override. The native `.cell` format is auto-detected\nvia its `# cell v` magic header.\n\n## Headless mode\n\nFor shell pipelines, Makefiles, and CI, `cell` can read from and write to a\nfile without launching the TUI:\n\n```sh\ncell sales.cell --read A1                 # print one cell's computed value\ncell sales.cell --read B1:B10             # print a range as TSV\ncell sales.cell --eval '=SUM(B1:B10)'     # evaluate a formula (no save)\ncell sales.cell --write A1 42             # set a cell, recalc, save in place\ncell sales.cell --write A1 42 --write B1 7 # batch multiple writes into one save\ncell sales.cell --write Total '=SUM(B:B)' --read Total  # write a formula, then print it\ncat data.csv | cell --read A1             # read from stdin\ncell data.psv --delimiter '|' --read A1   # custom delimiter\n```\n\n- Cell references are 1-indexed and Excel-style (`A1`, `AA10`, `A1:B3`).\n- The `=` prefix on `--eval` is optional.\n- Writes whose value starts with `=` are stored as formulas; others are auto-typed (number vs text).\n- Operations apply in a fixed order per invocation: writes → save → reads → evals.\n- Errors print to stderr; the process exits non-zero on bad refs, parse errors, or missing files.\n- Stdin input supports CSV, TSV, and the native `.cell` format. The delimiter\n  is auto-detected; pass `--delimiter` to override (CSV\u002FTSV only). `--write`\n  requires a file argument when reading from stdin.\n\n## Keybindings\n\nIf you know Vim, you know cell.\n\nAll motions and operators accept a `[count]` prefix (`5j`, `10G`, `3dd`,\n`4yy`, `2w`). Counts also work between an operator and its motion (`d3j`,\n`y2k`); outer and inner counts multiply (`5d2j` clears 10 rows). The\nin-progress count and operator render in the status line as you type.\n\n### Normal Mode\n\n#### Motion\n\n| Key                  | Action                                 |\n| -------------------- | -------------------------------------- |\n| `h` `j` `k` `l`      | Move cursor (one cell)                 |\n| `gg`                 | First row (or row N with `[count]gg`)  |\n| `G`                  | Last row (or row N with `[count]G`)    |\n| `0`                  | First column                           |\n| `$`                  | Last column                            |\n| `w` \u002F `b`            | Next \u002F previous non-empty cell in row  |\n| `Ctrl-D` \u002F `Ctrl-U`  | Half-page down \u002F up                    |\n| `Ctrl-F` \u002F `Ctrl-B`  | Full page down \u002F up                    |\n| `{` \u002F `}`            | Previous \u002F next block boundary in column |\n| `H` \u002F `M` \u002F `L`      | Cursor to top \u002F middle \u002F bottom of viewport |\n| `zz` \u002F `zt` \u002F `zb`   | Recenter \u002F scroll-to-top \u002F scroll-to-bottom around cursor |\n| `Ctrl-e` \u002F `Ctrl-y`  | Scroll viewport one row without moving cursor |\n| `Ctrl-o` \u002F `Ctrl-i` (or Tab) | Jump back \u002F forward in jump list |\n\n#### Marks\n\n| Key            | Action                              |\n| -------------- | ----------------------------------- |\n| `m{a-z}`       | Set mark at cursor                  |\n| `'{a-z}`       | Jump to marked row (column 0)       |\n| `` `{a-z} ``   | Jump to exact marked cell           |\n\n#### Editing\n\n| Key                  | Action                                 |\n| -------------------- | -------------------------------------- |\n| `i` \u002F `a` \u002F `Enter`  | Edit cell (Insert mode)                |\n| `x`                  | Clear cell                             |\n| `dd`                 | Delete row (`[count]dd` for N rows)    |\n| `d{motion}`          | Clear cells along motion (`dj`, `d3l`, `dh`, `dk`) |\n| `yy`                 | Yank row (`[count]yy` for N rows)      |\n| `y{motion}`          | Yank cells along motion (`yj`, `y3l`, `yh`, `yk`) |\n| `p` \u002F `P`            | Paste below \u002F above                    |\n| `Ctrl-A` \u002F `Ctrl-X`  | Increment \u002F decrement number in cell (`[count]` accepted) |\n| `~`                  | Toggle case of first character, advance cursor |\n| `guu` \u002F `gUU`        | Lowercase \u002F uppercase entire cell      |\n| `g~~`                | Toggle case of every character in cell |\n| `.`                  | Repeat last change                     |\n| `u`                  | Undo                                   |\n| `Ctrl-R`             | Redo                                   |\n\n#### Selection & search\n\n| Key                   | Action                                              |\n| --------------------- | --------------------------------------------------- |\n| `v`                   | Visual selection                                    |\n| `V`                   | Visual line (full-row) selection                    |\n| `Ctrl-V`              | Visual block selection                              |\n| `gv`                  | Re-enter previous visual selection                  |\n| `\u002F` \u002F `?`             | Search forward \u002F backward (incremental)             |\n| `n` \u002F `N`             | Next \u002F previous match                               |\n| `*` \u002F `#`             | Search for current cell's value forward \u002F backward  |\n| `f\u003Cchar>` \u002F `F\u003Cchar>` | Jump to next \u002F prev cell in row starting with `\u003Cchar>` |\n| `;` \u002F `,`             | Repeat last `f`\u002F`F` (same \u002F reversed direction)     |\n| `:`                   | Command mode                                        |\n\n### Insert Mode\n\nType to edit the cell. `ESC` or `Enter` confirms. Arrow keys, `Home`,\n`End`, `Backspace`, and `Delete` work as expected within the cell.\n\n### Visual Mode\n\nExtend the selection with `hjkl` (or `[count]j` etc.), then:\n\n| Key      | Action                                                   |\n| -------- | -------------------------------------------------------- |\n| `y`      | Yank selection                                           |\n| `d`      | Delete selection                                         |\n| `c`      | Change selection (clear and enter Insert mode)           |\n| `u` \u002F `U` \u002F `~` | Lowercase \u002F uppercase \u002F toggle case of selection (formula cells skipped) |\n| `Esc`    | Cancel selection                                         |\n\n### Commands\n\n\n| Command              | Action                                         |\n| -------------------- | ---------------------------------------------- |\n| `:w`                 | Save                                           |\n| `:w file.csv`        | Save as CSV                                    |\n| `:w file.cell`       | Save as native format                          |\n| `:w!`                | Force save (flatten formulas, override warnings) |\n| `:q`                 | Quit                                           |\n| `:q!`                | Quit without saving                            |\n| `:wq`                | Save and quit                                  |\n| `:e file`            | Open file                                      |\n| `:sort A asc`        | Sort by column A ascending                     |\n| `:sort B desc`       | Sort by column B descending                    |\n| `:set delimiter=\\|`   | Change CSV\u002FTSV delimiter for the next save     |\n| `:help` \u002F `:help \u003Ctopic>` | Open the in-app help screen \u002F jump to a topic |\n\nIn the `:` prompt, `↑` \u002F `↓` cycle through previously executed commands.\n\n\n## Mouse support\n\nMouse support is **off by default** so the terminal's native text\nselection keeps working. Enable it at runtime with `:set mouse on`,\ndisable it with `:set mouse off`, or flip the current state with\n`:set mouse toggle`.\n\nWhen enabled:\n\n- **Left-click** on a cell moves the cursor.\n- **Click + drag** inside the grid selects a Visual range.\n- **Click + drag** on a column header selects whole columns.\n- **Click + drag** on a row header selects whole rows.\n- **Scroll wheel** scrolls the viewport (cursor stays put). Horizontal\n  scroll works when the terminal emits `ScrollLeft` \u002F `ScrollRight`\n  (commonly bound to Shift + wheel).\n- **Double-click** a cell to enter Insert mode on it.\n- **Drag past the visible edge** auto-scrolls the viewport.\n\nTo copy a cell value out to your system clipboard while mouse mode is\non, hold your terminal's bypass modifier when clicking and dragging:\n\n| Terminal | Bypass |\n| --- | --- |\n| Linux terminals (gnome-terminal, alacritty, kitty, …) | Shift |\n| Windows Terminal | Shift |\n| macOS Terminal.app, iTerm2 | Option\u002FAlt |\n| tmux \u002F screen | configure per their docs |\n\n## Formulas\n\nFormulas start with `=` and support Excel-compatible syntax:\n\n```\n=A1+B1\n=SUM(A1:A10)\n=AVERAGE(B1:B5)\n=IF(A1>100, \"high\", \"low\")\n```\n\n### Supported Functions (v1)\n\n`SUM`, `AVERAGE`, `COUNT`, `MIN`, `MAX`, `IF`\n\nFormula compliance with the ODF (OpenDocument Formula) spec is tracked and will expand over time.\n\n## File Formats\n\n- **CSV\u002FTSV** -- Opens and saves standard comma\u002Ftab-separated files. Formulas are flattened to their computed values on CSV export.\n- `**.cell`** -- Native format that preserves formulas. Plain text, human-readable, inspired by [sc-im](https:\u002F\u002Fgithub.com\u002Fandmarti1424\u002Fsc-im).\n\nWhen saving a CSV that contains formulas, cell warns you and suggests saving as `.cell` instead. Use `:w!` to force a CSV save.\n\n## Comparison with sc-im\n\n[sc-im](https:\u002F\u002Fgithub.com\u002Fandmarti1424\u002Fsc-im) is a battle-tested terminal spreadsheet built on the classic `sc` (Spreadsheet Calculator, 1981). It inspired cell's native `.cell` format. Here's how the two tools compare:\n\n| | cell | sc-im |\n| --- | --- | --- |\n| **Language \u002F TUI** | Rust + ratatui | C + ncurses |\n| **Editing model** | True Vim modal editing (`i` → Insert, `ESC` → Normal) | Vim-inspired navigation; `=` to enter a value, `e`\u002F`E` to edit |\n| **Formula syntax** | Excel-compatible (`=SUM(A1:A10)`, `=IF(...)`) | `@`-prefix style (`@sum(A1:A10)`, `@avg(...)`) |\n| **Built-in functions** | SUM, AVERAGE, COUNT, MIN, MAX, IF | Extensive (@sum, @avg, @min, @max, @abs, @sqrt, ...) |\n| **File formats** | CSV, TSV, `.cell` | CSV, TSV, XLSX\u002FXLS\u002FODS import, Markdown export, `.sc` |\n| **Cell formatting** | not yet | Bold, italic, underline, RGB colors |\n| **Scripting** | Headless CLI mode (`--read` \u002F `--write` \u002F `--eval`, stdin pipe) | Lua scripting, external C modules, non-interactive mode |\n| **Charting** | not yet | GNUPlot integration |\n| **Windows support** | ✓ (pre-built binaries) | Limited |\n| **Clipboard** | Built-in | Requires tmux \u002F xclip \u002F pbpaste |\n| **Config file** | not yet | `~\u002F.config\u002Fsc-im\u002Fscimrc` |\n\n### Choose cell if…\n\n- You want editing that works exactly like Vim (`i` to insert, `ESC` to return, `\u002F` to search)\n- You prefer Excel-compatible formula syntax (`=SUM`, `=IF`, `=AVERAGE`)\n- You need a working binary on Windows without extra setup\n- You value a modern, memory-safe codebase with minimal dependencies\n\n### Choose sc-im if…\n\n- You need XLSX, ODS, or Markdown support right now\n- You need Lua scripting or GNUPlot charting right now\n- You need cell-level formatting (colors, bold, italic) right now\n- You want a highly configurable, feature-rich tool with decades of history behind it\n\n## Architecture\n\n```\ncell\u002F\n  crates\u002F\n    cell-sheet-core\u002F    # Data model, formula engine, file I\u002FO (no TUI dependency)\n    cell-sheet-tui\u002F     # Ratatui rendering, Vim modes, event loop\n```\n\nThe core library is independent of the terminal UI and can be tested without a terminal.\n\n## Releasing\n\nReleases are automated with [release-plz](https:\u002F\u002Frelease-plz.dev\u002F) from the\n[release workflow](.github\u002Fworkflows\u002Frelease.yml):\n\n- Pushes to `main` open or update a release PR with the next version and\n  changelog updates.\n- Merging the release PR publishes `cell-sheet-core` and `cell-sheet-tui` to\n  [crates.io](https:\u002F\u002Fcrates.io) via trusted publishing, creates the `vX.Y.Z`\n  tag, and creates a draft GitHub Release.\n- The same workflow run then builds binaries for Linux (x86_64, aarch64),\n  macOS (x86_64, aarch64), and Windows (x86_64), uploads archives and SHA256\n  checksums, and publishes the GitHub Release.\n\nSee [RELEASE.md](RELEASE.md) for maintainer instructions and failure handling.\n\n## Contributing\n\nContributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for the\ndevelopment setup, project conventions, and pull request workflow.\n\n## License\n\n[MIT](LICENSE)","cell 是一个支持 Vim 键绑定的终端电子表格编辑器，使用 Rust 语言编写。它具备快速响应和强大的数据处理能力，用户可以通过熟悉的 Vim 操作来编辑和管理电子表格，包括 CSV、TSV 和自定义格式文件。此外，cell 还提供了无头模式，可以在不启动图形界面的情况下通过命令行进行单元格读写及公式计算，非常适合集成到脚本、Makefile 或持续集成环境中使用。此项目适合需要在命令行环境下高效处理表格数据的开发者或数据分析师使用。","2026-06-11 02:42:42","CREATED_QUERY"]