diff options
| author | user <user@clank> | 2026-08-25 14:23:33 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-25 14:23:33 +0200 |
| commit | b744a90859bf248bfbea97f990668301b5fa9537 (patch) | |
| tree | f1b717507bc24161b7ab41def644289f9457470e /docs | |
| parent | placeholder webbie (diff) | |
| download | slosh-b744a90859bf248bfbea97f990668301b5fa9537.tar.gz slosh-b744a90859bf248bfbea97f990668301b5fa9537.tar.xz slosh-b744a90859bf248bfbea97f990668301b5fa9537.zip | |
compact: shared borders instead of gaps (D23)
One knob, `compact true`: panes pack flush against 1-cell divider lines
that meet in real junctions, one frame rings the tab, and a pane's title
rides the line above it -- a boundary costs one cell where the default
look spends four. The lines are strokes: each write says which edges of
its cell it needs, unions with what is there, and never clobbers text,
so ├ ┬ ┼ fall out of paint order and the focus ring recolours without
inventing arms. The divider *is* the gap (eff_gap, one answer for the
layout, split_fits and the resize clamp), so gap hits, hover hints and
corner drags work unchanged. Interior edges give up click-to-split --
one cell cannot hold two verbs -- and a pane's status row overlays its
last content row. Floats, zoom and the D6 flatten keep classic frames
through place_hidden: zero new tree cases.
Underneath it, mode or no mode: a border drag now moves the boundary on
that side, converted on the first motion so the press that never moves
keeps its old meaning -- the handle's click still splits, the rim's is
still deliberately nothing (drag.rim). Which is also the fix for gap 0,
where flush panes leave no gap cell to grab and the resize gesture had
silently vanished with it.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/config.md | 40 | ||||
| -rw-r--r-- | docs/panes.md | 9 |
2 files changed, 47 insertions, 2 deletions
diff --git a/docs/config.md b/docs/config.md index 463a688..25a7474 100644 --- a/docs/config.md +++ b/docs/config.md @@ -111,7 +111,7 @@ theme { frame_focus "#00ff88" } // ...but that one colour is mine | group | what is in it | |---|---| -| geometry | `gap` `gap_aspect` `padding` `rounded` `title_align` `title_inset` `min_pane` `min_split` | +| geometry | `gap` `gap_aspect` `padding` `compact` `rounded` `title_align` `title_inset` `min_pane` `min_split` | | chrome | `status_bar` `status_line` `status_pad` `hints` `version_banner` `pane_buttons` `bell_indicator` and the marks (`zoom_mark` `zoom_on_mark` `close_mark` `min_mark` `newtab_mark` `bell_mark`) | | behaviour | `focus_follows_mouse` `scroll_lines` `scrollback` `scrollback_bytes` `toast_ms` `splash_ms` `hover_delay_ms` `double_click_ms` `word_separators` `anim_ms` `modal_scrim` `dim_unfocused` `float_shadow` `keep_dead` `in_band_shaders` `shell` `editor` `shader_dir` | | projects | `project_roots` `project_layout` — see [workspaces](workspaces.md) | @@ -138,6 +138,44 @@ A number means the same thing however many of them you write, so `padding 1`, values is refused — CSS reads it as top/horizontal/bottom, and a line whose meaning you have to look up is a line nobody can read. +## Compact + +```kdl +compact true +``` + +Shared borders instead of gaps. Panes pack flush against 1-cell divider lines +that meet in real junctions — `├` `┬` `┼` — one frame rings the whole tab, and +each pane's title rides the line above it, so a boundary costs one cell where +the default look spends four (a border, a gap, a border): + +``` +╭────── nvim ───── ▬ □ ✕ ─┬─── npm run dev ── ▬ □ ✕ ─╮ +│ │ │ +│ ├────── shell ──── ▬ □ ✕ ─┤ +│ │ │ +╰──────────────────────────┴──────────────────────────╯ +``` + +What changes, and what does not: + +- `gap` and `gap_aspect` stop applying — the boundary *is* the divider. + `padding` still works, and `rounded` still picks the corners. +- **Dividers drag exactly as gaps did**, corners included, and the same hover + hints appear on them. A pane whose title line is a shared divider is still + dragged — by its name. +- **Interior edges give up click-to-split**: a one-cell line cannot honestly + hold both verbs, and the whole line is the resize handle. The outer frame + keeps its split handles, and the keyboard splits anything, as ever. +- A pane's **status row** — a dead pane's epitaph and its `[re-run] [close]`, + a program's own OSC 5577 row — overlays the pane's last content row, there + being no bottom border left to carry it. +- **Floats keep the classic frame** (an overlay needs its own edge), and so + does a zoomed pane or a flattened tab — nothing there is packed against + anything. +- Chrome shaders run over the pane's stretch of the shared lines; a line + between two panes belongs to both, which is what sharing means. + ## Scrollback ```kdl diff --git a/docs/panes.md b/docs/panes.md index 52ace45..ea03566 100644 --- a/docs/panes.md +++ b/docs/panes.md @@ -60,7 +60,14 @@ nothing you click can disagree with what is on screen. for the double-click rename. Arming an edge leaves the name, the buttons and a dead pane's epitaph legible — the heavy rule goes round them. - **Drag the gap between panes** to move that boundary. Where two gaps cross, - drag the crossing to move both at once. + drag the crossing to move both at once. With `gap 0` there is no gap to + grab, so grabbing the border itself and pulling does the same thing — a + border press that never moves is still the click that splits. +- **[`compact true`](config.md#compact)** trades the gaps for shared 1-cell + divider lines — tmux-style density, same mouse: dividers drag, crossings + drag both ways, titles ride the line above their pane. Interior edges give + up click-to-split (the line is all resize handle); the outer frame keeps + it. - **Drag a pane by its title** onto another to swap them — or to *place* it: the pane under the pointer subdivides into a centre and four edge bands, and where you let go is what the drop means. The centre trades places, as |
