Commit Graph
26 Commits
Author SHA1 Message Date
Greyson Parrelli 553e1f5424 Update tab styling. 2026-08-27 11:02:32 -04:00
Greyson Parrelli 0bf85b3b2a Add ability to restore previous layout. 2026-08-27 10:55:04 -04:00
Greyson Parrelli 7414c89fe6 Add notifications. 2026-08-26 23:24:14 -04:00
Greyson Parrelli afad6a2636 Simplify sidebar styling. 2026-08-26 22:38:03 -04:00
Greyson Parrelli 44619293c3 Hopefully fix some copy-paste stuff. 2026-08-25 16:48:34 -04:00
Greyson Parrelli 198258c181 Added a hopeful quit blocking dialog. 2026-08-25 16:24:00 -04:00
Greyson Parrelli 07ed03b570 Add ctrl+f for review tool. 2026-08-25 09:35:25 -04:00
Greyson Parrelli 407dd81512 Build in the review tool. 2026-08-24 09:24:01 -04:00
Greyson Parrelli 4eef6a28d3 Fix icon sizing. 2026-08-23 14:35:47 -04:00
Greyson Parrelli 63203433dc Fix button sizing. 2026-08-21 22:35:58 -04:00
Greyson Parrelli a742b51d3b Add better and configurable shortcuts. 2026-08-15 00:00:06 -04:00
Greyson Parrelli b50e2f4108 Add tab re-ordering. 2026-08-14 21:21:13 -04:00
Greyson Parrelli 2daeb6125f Fix mouse interactions in terminal. 2026-08-13 11:46:48 -04:00
Greyson Parrelli 71b3c93521 Add find shortcut in browser. 2026-08-13 11:18:33 -04:00
Greyson Parrelli 4e622b15af Add ability to set boot layout. 2026-08-13 10:52:58 -04:00
Greyson Parrelli 6c7c3bfa63 Add emoji prefix. 2026-08-13 09:56:34 -04:00
Greyson Parrelli e16b147e16 Improve styling. 2026-08-12 21:15:07 -04:00
Greyson Parrelli 4e0e400372 Fix hooks. 2026-08-12 18:50:16 -04:00
Greyson Parrelli dca5ec0b7d Add focus button. 2026-08-12 08:05:23 -04:00
Greyson Parrelli dd60e52005 Add hook system. 2026-08-11 16:24:53 -04:00
Greyson Parrelli 73a0187db5 Rebrand as Playpen. 2026-08-11 14:26:12 -04:00
Greyson Parrelli 3026bdcd4c Add custom layout creation. 2026-08-11 13:57:54 -04:00
Greyson Parrelli a7a9429d09 Add a web browser tab. 2026-08-11 12:39:14 -04:00
Greyson Parrelli 918ccec6e1 Split tree layouts, resizable dividers, and live drag preview
Replaces the flat pane list with a binary split tree, so a view can hold
layouts a single shared orientation could not express. Three panes in a row
with the rightmost dragged to the bottom now gives two on top and one
spanning the full width beneath them.

Each split node owns a GtkPaned, which brings draggable dividers. Positions
are stored as ratios and re-applied whenever the available space changes, so
proportions survive window resizes while user drags still update them.

Drop placement depends on proximity to the view's own border: near an edge
the pane is placed against the whole layout and spans it, anywhere else it
splits only the pane under the pointer.

Drags now rearrange live rather than on release, so the layout under the
cursor is always the result. Cancelling restores the original arrangement,
which works because only the dragged pane moves: the rest of the tree keeps
its shape, so re-inserting beside the original sibling is enough.

Fixes a latent ownership bug the tree exposed: panes did not hold a
reference to their own widget, so detaching one during a rebuild dropped the
last reference and finalized it, producing GTK_IS_WIDGET assertion failures.
Panes and split nodes now each own a reference to their widget.
2026-08-11 11:25:44 -04:00
Greyson Parrelli 5b00c98e03 Multiple terminals per tab, rearrangeable by drag or keyboard
A tab is now a view holding an ordered list of panes rather than a single
terminal. New panes open side by side; moving one against a top or bottom
edge restacks the view, and against a side edge returns it to a row.

Layout is a flat list with one orientation per view rather than a split
tree. That covers a shell beside an agent without the structure a tree
needs, and it can be replaced once mixed layouts actually matter.

Panes live in a GtkBox and are reordered in place, so rearranging never
unparents a terminal and running processes and scrollback survive the move.

Dragging a pane uses its header as the handle so it never competes with the
terminal's own mouse handling, and drops go through the same moveRelative
path as the Ctrl+Shift+arrow shortcuts.

Also fixes an ordering bug this surfaced: View.create used to add its first
pane immediately, firing the title callback into a Tab that had not been
initialized yet. The view is now created empty and the caller adds the pane
once it has finished wiring itself up.
2026-08-11 10:59:21 -04:00
Greyson Parrelli 738cead680 vtabs: terminal with vertical tabs on libghostty-vt + GTK4
Uses libghostty-vt (the API Ghostty documents for external embedders) for
the terminal core. Ghostty's other C API, ghostty.h, exposes a full terminal
surface but only supports macOS and iOS platform tags, so it cannot be
embedded on Linux.

We supply the layers libghostty-vt deliberately leaves out: PTY and process
management, a Cairo/Pango cell renderer, and a GTK4/libadwaita UI with a
Zen-style vertical tab sidebar.

Nix pins the whole toolchain (Zig 0.16 via zig-overlay, GTK 4.22, libadwaita)
so no host setup is needed.
2026-08-11 08:36:10 -04:00