summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pardes.zig19
-rw-r--r--src/tutor.txt12
2 files changed, 20 insertions, 11 deletions
diff --git a/src/pardes.zig b/src/pardes.zig
index d3376273..31757732 100644
--- a/src/pardes.zig
+++ b/src/pardes.zig
@@ -4940,19 +4940,24 @@ pub const Pardes = struct {
p.placeDoc(id, free, np);
}
- /// place a fresh doc pane. Any doc already open is the split parent (the
+ /// place a fresh doc pane. An OUTPUT buffer (+Search/+Help) is NOT a
+ /// document: it is the result list belonging to the pane that asked for it,
+ /// so it never claims a column and is never anyone else's split parent — it
+ /// lands right below `from_id`, be that a shell, a file or another list.
+ /// A real doc joins the docs: any doc already open is the split parent (the
/// source if it IS one, else the first found) and the newcomer lands right
/// below it, so all docs share one column. The FIRST doc of the session
/// instead gets a column of its own on the left (acme: files left, shells
- /// right) — nothing is displaced, the other columns just narrow. Only a
- /// full column bar falls back to stacking into the leftmost one.
+ /// right) — nothing is displaced, the other columns just narrow. A full
+ /// column bar, or a result list whose source died, stacks into the leftmost.
fn placeDoc(p: *Pardes, from_id: usize, free: usize, nt: *Pane) void {
+ const doc = if (nt.file) |f| !f.output else true; // an image is a doc
var src_id: ?usize = null;
- if (p.panes[from_id]) |src| if (src.file != null or src.image != null) {
+ if (p.panes[from_id]) |src| if (!doc or (if (src.file) |f| !f.output else src.image != null)) {
src_id = from_id;
};
- if (src_id == null) for (p.panes, 0..) |sl, i| {
- if (sl) |pp| if ((pp.file != null or pp.image != null) and i != free) {
+ if (doc and src_id == null) for (p.panes, 0..) |sl, i| {
+ if (sl) |pp| if (i != free and (if (pp.file) |f| !f.output else pp.image != null)) {
src_id = i;
break;
};
@@ -4965,7 +4970,7 @@ pub const Pardes = struct {
p.active = free;
return;
}
- if (p.ncol < MAX_COLS) {
+ if (doc and p.ncol < MAX_COLS) {
p.layoutInsertColumn(0, free);
p.active = free;
return;
diff --git a/src/tutor.txt b/src/tutor.txt
index 195173c6..39a869e2 100644
--- a/src/tutor.txt
+++ b/src/tutor.txt
@@ -139,8 +139,11 @@
and case-insensitive, and writes one row per hit into a "+Search" pane.
That is an OUTPUT BUFFER: a file pane with no file behind it, so it has
no Save, but everything else about it is an ordinary buffer you can read,
- edit, select and look in. `n`/`N` step the rows and look each one, so the
- view follows along. Right-clicking a word that names no file in ANY open
+ edit, select and look in. It is not a document, though, and never takes a
+ column of its own: it opens BELOW the pane that asked for it, in that
+ pane's column, be that a file or a shell — and a file you then open from
+ its rows goes where files go, not under the list. `n`/`N` step the rows
+ and look each one, so the view follows along. Right-clicking a word that names no file in ANY open
pane's directory searches for it — acme's button 3 — except in tty mode,
where the click belongs to the program on the other end. On a shell with no
search armed, n/N instead step the lookable tokens in its output.
@@ -494,8 +497,9 @@
`?` works at ANY depth: SPC ? lists everything, SPC h ? lists only
what the "h" group holds. Help writes into a "+Help" OUTPUT BUFFER,
- the same kind of pane "/" search results land in — ordinary text, so
- the names in it are live: middle-click "Tutor" there and it opens.
+ the same kind of pane "/" search results land in — so it opens below
+ the pane you asked from, never in a column of its own — and ordinary
+ text, so the names in it are live: middle-click "Tutor" and it opens.
(No practice blocks: these run builtins, not text edits.)