Files
cumulus/Cargo.toml
T
skkeyeandClaude Opus 5.5 f6dc4564aa Run cumulus for real: the app core and its files (stage 8a)
The playground becomes app::App, and `cumulus` runs it: the main loop
with terminal setup and a panic hook, and the startup rules (./ideas.cum,
else ~/ideas.cum, made the first time; files and folders by name;
`cumulus new`; --paths).

The documents' files:
- autosave a second after the latest change (`:set noautosave` for
  vim-style :w), [+] in the document bar for unsaved changes; quitting
  saves first; without autosave :q refuses, :q! drops, ZZ saves first;
- a file changed outside cumulus is read again as an undo step; with
  unsaved changes here too, cumulus asks which to keep; a file with a
  mistake in it holds autosave until it's fixed or :w saves over it; a
  deleted one waits for :w; nothing is reloaded under an edit;
- the day's first save backs the file up to the data folder (30 days);
- a document open in another cumulus is read-only ([RO]) until that one
  lets go: OS file locks in the data folder, so a crash leaves none;
- where you left off (cursor, zoom, scroll), the recent documents (now
  in the documents picker) and the command history, in memory.ron;
- :e (alone: read it again; ! drops changes), :new, :bd, :w, :wa, :x,
  :qa, <Space>i for :in, and :set for every setting. glyphs=ascii now
  reaches the frames and bars too, not just the canvas and outline.

Stage 8 comes in four parts with a commit each (the user's choice); 8b
is the settings files. The example is now a playground running the app
on copies of the sample documents in a temporary folder, and the
end-to-end tests moved to src/app/tests.rs, with tests for the files.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-01 23:18:21 -04:00

43 lines
1.5 KiB
TOML

[package]
name = "cumulus"
version = "0.1.0"
edition = "2024"
# The version cumulus is built and tested with (pinned in rust-toolchain.toml).
rust-version = "1.90"
description = "Brainstorm in the terminal: idea graphs on a 2D canvas, with vim keys and the mouse."
publish = false
[dependencies]
# Document files are RON (Rust Object Notation), read and written through serde.
serde = { version = "1", features = ["derive"] }
ron = "0.12"
# Config files are TOML: keys.toml so far, config.toml and themes later.
toml = "1"
# Error types with readable messages, for the parts that report problems.
thiserror = "2"
# Terminal user interface. The crossterm backend works on Windows, Linux and
# macOS. Default features are off to skip widgets cumulus doesn't use.
ratatui = { version = "0.30", default-features = false, features = ["crossterm_0_29", "layout-cache"] }
# How many terminal columns text takes (accents, Asian scripts, emoji), for
# sizing node boxes.
unicode-width = "0.2"
# Where one character ends and the next begins, so the cursor steps over an
# accented letter or an emoji in one go.
unicode-segmentation = "1"
# Where each OS keeps settings and app data: %APPDATA% on Windows,
# ~/.config and ~/.local/share on Linux.
directories = "6"
[lints.rust]
unsafe_code = "forbid"
[lints.clippy]
all = { level = "warn", priority = -1 }
[profile.release]
# A smaller, faster program: optimize across all crates at once (lto, in one
# piece with codegen-units = 1), and leave out the debug symbols (strip).
lto = true
codegen-units = 1
strip = true