Add connect mode, portals, backlinks and renames (stage 8d, v1)

Part 8d, the last of stage 8, and with it everything on DESIGN.md's v1
list.

Connect mode (C): the cursor goes to another node, a dashed arrow in the
visual color follows it, and Enter links the two; then the cursor goes
back to where C was typed (the user's pick). d removes the line between
them (a branch is cut, and the child comes loose), > puts the node under
the other one, and <Space> a, l, c, s and t style the line as you watch,
making it when it isn't there yet. Everything connect mode changes is one
undo group, and Esc takes it back with History::cancel, which leaves
nothing to redo. From visual mode every selected node connects, and the
line pickers go back to connect mode when they close.

Portals show their document live, from a cache of what each document
file holds (open documents from their buffers, the others from their
files, looked at every second): the root's title, its color and how many
nodes it has, or ? when the document isn't there. Enter or gf goes
through, as a jump, and the pane's breadcrumb starts with the documents
it came through. <Space>p types :portal (the user's pick): a path as :e
takes it, or the title of a new document. Backlinks are put right
whenever a document is opened or saved; the root shows how many, the
Note view lists them, gu goes up to them (the user's pick) and
:backlinks lists them.

File names follow the root's title: when it changed, the next save
renames the file (-2 when the name is taken; a folder's default document
keeps its name), and the portals pointing at it, its backlinks in the
documents it leads to, the recent documents, the capital marks and the
jump lists follow. A portal whose file was moved by hand finds its
document in that folder by uid. Portals in a register keep full paths,
so a pasted portal leads to the same document from any folder.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
skkeyeandClaude Opus 5.5 committed 2026-10-02 08:24:43 -04:00
1 parent bd819409f4
commit ebe8a5988e
45 files changed
+2329 -148

No files matched your search

+19
View File
@@ -7,6 +7,7 @@
use super::documents::BufferId;
use super::jumps::Place;
use super::mode::Connect;
use super::panes::Arrange;
use super::popup::{MenuFor, PickKind};
use super::repeat::Look;
@@ -96,6 +97,9 @@ pub enum DocAction {
SetMark(char),
/// Go to a mark; `'` and `` ` `` go back to before the last jump.
JumpToMark(char),
/// Take back the group's undo step, if it's the newest, leaving nothing
/// to redo: Esc in connect mode.
Cancel(Group),
}
/// What happens around the documents.
@@ -124,6 +128,21 @@ pub enum AppAction {
EnterMoveMode(Vec<NodeId>),
/// In move mode: the whole branch, or just the node.
ToggleWhole,
/// Connect mode (`C`): from the cursor's node, or from these (a
/// selection's).
EnterConnectMode(Vec<NodeId>),
/// Back to connect mode, from a picker it opened.
ResumeConnect(Connect),
/// Enter or `gf` on a portal: through it, to its document's root.
FollowPortal(NodeId),
/// `:portal`: a portal under the cursor's node, to the document at the
/// path typed (a new document when nothing's there).
NewPortal(String),
/// `gu`: up to the portals that lead to this document; `list`
/// (`:backlinks`) lists them even when there's just one.
GoUp {
list: bool,
},
/// Back to normal mode.
LeaveMode,
OpenCommandLine,