A wheel that tilts (or a touchpad) already panned the canvas sideways, but only when the terminal passes those events on, and many don't: Windows Terminal only does since 1.24, and Windows' own console layer can drop them. The wheel with Shift held now scrolls sideways too, as in most apps, and so does Alt, since Alacritty and Windows Terminal keep Shift with the mouse for selecting text. The outline scrolls sideways as well (the wheel, zh and zl), for rows wider than its pane: a deep tree or a long title. Clicks land where the rows are, however far they're scrolled, and when the cursor moves its title comes back into view. Fixed on the way: the wheel turned sideways over the help, the menu, a picker or the K card moved it up. Co-Authored-By: Claude Opus 5.5 <[email protected]>
3.1 KiB
cumulus
Brainstorm in the terminal: ideas as nodes on a 2D canvas, connected, folded and color-coded, across as many documents as you like. Vim keys first; the mouse works too. Runs on Windows and Linux.
Status: being built, one stage at a time. See DESIGN.md for the plan; this README grows with the app.
Build and run
You need Rust (rustup.rs). The exact version is pinned in
rust-toolchain.toml, and rustup installs it by itself the first time.
cargo build --release
The program is target/release/cumulus (cumulus.exe on Windows): copy it to
a folder on your PATH.
- Windows: nothing else to install. The
.execarries its own C runtime and runs on any Windows 10 or 11. - Linux (Void, Fedora…): build the same way. You can also build a static
Linux binary from Windows with
cargo linux: it lands intarget/x86_64-unknown-linux-musl/release/cumulusand runs on any distribution.
Keys
The plan for the everyday keys (all of them are in DESIGN.md):
| Keys | What they do |
|---|---|
hjkl |
move to the nearest node that way |
gh gj gk gl |
parent, next sibling, previous sibling, first child |
o O a |
new sibling below / above, new child: type its title, Enter for the next one |
i or Enter |
edit the title (Esc: vim keys inside it, Esc again: done) |
dd x |
delete the branch / just the node |
>> << |
under the node above / out a level |
u Ctrl-r |
undo / redo |
za zf zi |
fold, auto-fold, focus |
+ - |
zoom in / out |
K |
the body in a card beside the node (i edits it there) |
C M v |
connect, move, select |
<Space> |
the action menu: c color, t tags, vo outline, vn note… |
Ctrl-w v Ctrl-w s |
split the pane side by side / stacked (Ctrl-w hjkl to move between them) |
gt gT |
the next / previous document |
: ? |
command line, help (search it with /, Enter runs the key or command) |
After the first key of a sequence (g, z, d, <Space>…), a popup lists
what can follow. The right mouse button opens a menu of what you can do with
a node. The wheel scrolls; with Shift or Alt held (or a wheel that tilts), it
scrolls sideways.
Development
cargo test # run the tests
cargo lint # clippy, treating warnings as errors
cargo fmt # format the code
While the app is being built, the examples try out each part:
cargo run --example canvas # everything so far: the views, splits, popups, editing
cargo test show_canvas -- --ignored --nocapture # print it at each zoom, as text
cargo test --example canvas # type key sequences into it, and check what they do