summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/config.md8
-rw-r--r--docs/fs.md9
-rw-r--r--docs/helix-keys.md2
-rw-r--r--docs/tags.md68
-rw-r--r--docs/ui-review.md3
5 files changed, 78 insertions, 12 deletions
diff --git a/docs/config.md b/docs/config.md
index 16fd59e5..77ed68e7 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -111,9 +111,11 @@ themes and all imported names remain available.
`FocusTint` toggles the focused pane and column tag tints; it is on by default.
Workspace, column and pane command text can be edited directly; see
[editable tags](tags.md) for naming and saved-workspace behavior.
-`ColumnTags` toggles the column command row in both GUI and TTY; it is on by
-default. Add `ColumnTags` to startup configuration to reclaim that row on a
-compact screen. Hiding it preserves your custom column commands.
+The column command row is always shown; an old `ColumnTags` init line is
+ignored with a message.
+`Placement acme` (the default) puts new panes where acme would, in the active
+column; `Placement pardes` brings back pardes's own rules, which open a first
+document in a column of its own. See [where new panes go](tags.md#where-new-panes-go).
`Verbose` toggles the message-row announcement every builtin makes of its own
name before it runs; it is on by default, and the builtins that own the message
row themselves (`Msg`) never announce. Turning it off leaves the row to the
diff --git a/docs/fs.md b/docs/fs.md
index 98a8638d..eaaedf02 100644
--- a/docs/fs.md
+++ b/docs/fs.md
@@ -69,8 +69,13 @@ for any process, and `$NINE_MOUNT/pardes/NAME/` a `--detach=NAME` session's.
9ns exports `$NINE_MOUNT` to everything it starts, so a script checks that
variable to know the mount is there, and takes the name from `$PARDES_9P`
(`pardes-9p-<pid or NAME>.sock`). A new pane made through `pane/new` is a scratch named
-`<dir>/+New` until it is given a name, and closing a column's last pane
-leaves such a `+New` in its place (`Delcol` closes the column).
+`<dir>/+New` until it is given a name. A column may hold no pane, as in acme:
+`Newcol` makes one empty, and closing a column's last pane leaves it empty
+with its tag holding the keyboard (`focus` reads empty) and logs only the
+`del`. `pane/new` places its pane as acme's makenewwindow(nil) does: in the
+active column, filling it when it is empty, else taking the bottom half of its
+last pane ([where new panes go](tags.md#where-new-panes-go)). `Delcol` closes the column. Closing the
+session's last pane quits pardes; see [tags](tags.md#empty-columns).
For [Linux v9fs](https://www.kernel.org/doc/html/latest/filesystems/9p.html),
use `version=9p2000,cache=none,access=any` and `trans=unix`, or `trans=tcp`
diff --git a/docs/helix-keys.md b/docs/helix-keys.md
index c703a3da..8874bf08 100644
--- a/docs/helix-keys.md
+++ b/docs/helix-keys.md
@@ -127,7 +127,7 @@ language-backend queries, and the shell pipe.
| `Enter` (normal) | acme **look** chord: EXPLICIT selection, else file-ish word under cursor | pardes-specific, keep (helix normal-mode Enter unbound). Covers helix `gf`. Implicit motion residue falls back to the cursor word | pardes-specific |
| `Tab` (normal) | acme **execute** chord | pardes-specific, keep; explicit-selection rule as Enter | pardes-specific |
| `:` (normal, body or tag) | in the body, focuses the pane's tag in normal mode at its remembered cursor (the first time, on `Save`); in the tag, goes back to the body; in a column or workspace tag, back to the active pane. The tag's normal and insert modes ARE the body's: every motion, selection, edit and undo works there, and `0` goes to the line's start, the path's. Tab runs the word under the cursor or the selection and Enter looks it up (in a column or workspace tag Enter runs it too), and either hands the keyboard back to the body first. Clicks choose a new cursor position and type into the tag. | Each tag keeps its own cursor during the session. The computed path/marker/page is reachable and yankable but read-only: an edit into it is refused, and typing into a file's path drafts a new name. File-name changes are staged as described in [editable tags](tags.md). | pardes-specific |
-| `Ctrl-w k` / `SPC w k` (pane with nothing above) | focuses its column's tag, then the workspace tag; with `ColumnTags` disabled it goes directly to the workspace. `Ctrl-w j` walks back to the panes, `Ctrl-w h`/`l` walk the column tags. Headers edit exactly as a pane tag does. | Column commands target that column's active pane, or its first pane when coming from elsewhere. Workspace and column text are independently editable and persist in dumps. See [editable tags](tags.md). | pardes-specific |
+| `Ctrl-w k` / `SPC w k` (pane with nothing above) | focuses its column's tag, then the workspace tag. `Ctrl-w j` walks back to the panes, `Ctrl-w h`/`l` walk the column tags. Headers edit exactly as a pane tag does. | Column commands target that column's active pane, or its first pane when coming from elsewhere. Workspace and column text are independently editable and persist in dumps. See [editable tags](tags.md). | pardes-specific |
| `Ctrl-w` + `h/j/k/l`/arrows | directional pane focus prefix — editor normal mode only | pardes' own window handling (helix window mode skipped, section C). Runs the SAME `Left`/`Down`/`Up`/`Right` builtins `SPC w h/j/k/l` runs; Raw **tty** mode forwards Ctrl-w to the child. Insert mode owns `Ctrl-w` = delete-word-back, so a tag being TYPED into swallows it; from a tag in normal mode it moves focus to the neighbour's BODY, as from a body, and from the top pane `Up` reaches the column and workspace tags | pardes-specific |
| `Alt-n` | new terminal below (outside raw tty) | shadows helix `Alt-n` (select next sibling), which pardes spells `Alt-right` alone | pardes-specific |
| `Alt-c` | move active terminal to a fresh column (outside raw tty) | helix `Alt-c` is change-noyank; the pardes window op wins (do-not-touch contract). `Alt-d` + `i` covers the behavior | waived (`alt-c-window-op`) |
diff --git a/docs/tags.md b/docs/tags.md
index fdea1472..7787d7f1 100644
--- a/docs/tags.md
+++ b/docs/tags.md
@@ -1,8 +1,9 @@
# Editable tags
Pardes has three levels of command text: the workspace tag, one tag per
-column, and each pane's tag. Column commands run in that column's active
-pane (or its first pane when focus comes from another column). This makes
+column, and each pane's tag. Column commands act on that column and run in
+its active pane (or its first pane when focus comes from another column); a
+column with no pane is described under [empty columns](#empty-columns). This makes
`New`, `Tty`, `Find`, and `Grep` available beside the work they act on.
`New` appears only in the column tag by default; pane tags keep their own
save, terminal, close, and collapse commands. `Tty` opens a new embedded terminal.
@@ -152,7 +153,7 @@ upgrade to `Mode`; customized command text is preserved.
## Saved workspaces
`Dump` and `Restore` preserve customized workspace and column tags, including
-intentionally empty tags. New columns start with the standard column tag.
+intentionally empty tags, and columns that hold no pane. New columns start with the standard column tag.
Closing a column keeps surviving columns' tags; `Joincol` keeps the destination
column's tag. Old dumps without these optional fields retain the defaults.
The automatic `Restore` shortcut does not overwrite a customized workspace
@@ -163,7 +164,66 @@ than three rows it is omitted so a pane still has room. SDL and TTY share the
same tag text, editing and layout; SDL additionally uses compact font sizing
and subtle pixel separators.
-`ColumnTags` toggles the column row (on by default) without deleting its text.
+The column row is always shown. An old `ColumnTags` line in an init file is
+ignored, with a message saying so.
`FocusTint` controls active-column and active-pane emphasis. SDL also honors
the shared bold, underline, and strikethrough attributes, including diagnostic
underlines and the optional `SyntaxBold` keyword weight.
+
+## Empty columns
+
+A column can hold no pane, as acme's can: its tag stands over blank space, the
+frame's own fill, where acme paints white (cols.c:186-188). `Newcol` makes an
+empty column right of the keyboard's and gives its tag the keyboard. Closing a
+column's last pane (`Del`, `Del k`/`Del j`, a shell exiting, a drag to another
+column) leaves the column empty where it was, and the keyboard goes to its tag
+if it was on that pane. Only `Delcol` and `Joincol` take a column away.
+
+`Delcol` and `Joincol` from a column's tag act on that column; `Delcol`
+written to a pane's ctl closes that pane's column. A pane dragged onto an
+empty column fills it.
+
+## Where new panes go
+
+Every new pane goes through one placement, chosen by the `Placement` setting:
+`acme` (the default) or `pardes`. `Placement pardes` or `Placement acme` sets
+it, in an init file, a tag or the root ctl; bare `Placement` flips it; `SPC c
+p` is its leader path, and `Config` reports it.
+
+`Placement acme` is acme's makenewwindow (util.c:449-495). The core keeps
+acme's *active column* (activecol, dat.c:37): the column last typed in
+(acme.c:487), clicked in with the select button (acme.c:659), dropped into by
+a grip (acme.c:640), whose tag was given the keyboard (`Newcol`, an emptied
+column, `Ctrl-w k`), or that was given the last new pane (util.c:467). A Look
+click moves the keyboard but not the active column, as button 3 does not in
+acme. A new pane goes into the column a command's tag belongs to when it came
+from a column tag, else the active column, else the keyboard's pane's, and
+never into a new column:
+
+- an empty column it takes whole (util.c:468-469);
+- from a tag, or 9P's `pane/new` (acme's `t->w == nil`), it takes the bottom
+ half of the column's last pane (coladd, cols.c:62-65);
+- from a pane's text (a Look, `Tty`, `Alt-n`, a Grep or Find listing), it goes
+ right under the text of the pane with the most blank rows when that is more
+ than 15 rows, or more than 3 and more than half the biggest pane
+ (util.c:482-486); otherwise it halves the biggest pane, or the asking pane
+ when that is in the column and not much smaller (util.c:487-491);
+- `New` goes into its own column, the bottom half of its last pane
+ (look.c:921-923);
+- a command pane or a `+Errors` pane goes to the last column, the bottom
+ half of its last pane (util.c:94-98).
+
+`Placement pardes` is what pardes did before: an empty column whose tag asked,
+or has the keyboard, is filled; a scratch goes right under the pane that asked;
+a shell under it or the nearest pane with room; a document beside the last one
+read, or in a column of its own on the left when there is none and the column
+is at least 200 cells wide; a command pane at the foot of the last column.
+
+Down from an empty column's tag stays there, and the pane-to-pane keys pass
+over an empty column; Left and Right from a tag walk every column's tag.
+
+One divergence from acme: acme keeps running when its last window closes,
+every column empty. Pardes quits when the session's last pane closes, as
+`Delcol` of the last column always has. A key, a prompt or a command in
+pardes runs in a pane, so a session without one would have nothing to run
+them in.
diff --git a/docs/ui-review.md b/docs/ui-review.md
index 58a42e61..1180a20e 100644
--- a/docs/ui-review.md
+++ b/docs/ui-review.md
@@ -98,8 +98,7 @@ tests and 797 SDL tests; SDL image/PDF and Kitty PDF rendering harnesses pass.
## Column and editable-tag follow-up
The follow-up adds editable workspace and column command rows, compact pane
-tags, staged buffer-name edits, caret reveal for long tags, and `ColumnTags`
-to reclaim the extra row when needed. See [editable tags](tags.md) for the
+tags, staged buffer-name edits, and caret reveal for long tags. See [editable tags](tags.md) for the
exact interaction and save-target rules.
`test/column_tags.py` exercises isolated SDL and TTY sessions against the same