Add find shortcut in browser.

This commit is contained in:
Greyson Parrelli
2026-08-13 11:18:33 -04:00
parent 4e622b15af
commit 71b3c93521
7 changed files with 437 additions and 14 deletions
+26 -4
View File
@@ -114,7 +114,7 @@ View.zig one tab's content: its panes, their layout, and drag handling
Layout.zig the split tree: nodes, rearranging, GtkPaned materialization
Pane.zig content plus its header, drag source, and drop target
Terminal.zig GtkDrawingArea: Cairo/Pango renderer + input handling
Browser.zig WebKitWebView plus a back/forward/reload/address bar
Browser.zig WebKitWebView plus a nav/address bar and a find bar
webkit.zig hand-written bindings for the WebKitGTK calls we make
Layouts.zig saved tab templates: model, JSON on disk, {{substitution}}
OpenLayoutDialog.zig prompts for a layout's parameters
@@ -369,7 +369,8 @@ in principle, but a terminal grid is small.
- **Web panes**, on WebKitGTK, sitting in the split tree beside terminals and
dragging around exactly like they do: back/forward/reload, an address bar
that takes a URL or falls back to a search, a load-progress indicator in the
entry, and the page title feeding the pane header and tab label
entry, and the page title feeding the pane header and tab label, plus
find-in-page on `Ctrl+F`. See [Find in page](#find-in-page)
- **Saved layouts**: whole tabs — panes, splits, ratios, per-pane directories
and scripts — opened in one go, parameterised by `{{name}}`, authored by
arranging a tab and saving it. See [Layouts](#layouts)
@@ -404,6 +405,7 @@ in principle, but a terminal grid is small.
| `Ctrl+Shift+V` | paste into a terminal (bracketed-paste aware, refuses unsafe pastes) |
| `Ctrl+Shift+R` | rename the current tab (empty name = follow the terminal) |
| `Ctrl+Shift+Z` | zoom the focused pane to fill the tab, and back |
| `Ctrl+F` | find in the focused web page (web panes only — see [Find in page](#find-in-page)) |
| `Ctrl+,` | settings |
| `Ctrl+PageUp/PageDown` | previous / next tab |
| `Alt+1`..`Alt+8` | jump to tab N, `Alt+9` jumps to the last |
@@ -441,6 +443,26 @@ that zoom is hiding. Closing the zoomed pane leaves zoom; a *different* pane
closing — a background shell exiting, say — does not, since what you are looking
at is still there.
## Find in page
`Ctrl+F` in a web pane opens a find bar under its address bar. Typing searches
as you go — case-insensitively, wrapping at the end of the document — and the
bar reports how many matches there are, or says there are none and reddens the
box. `Enter` steps to the next match, `Shift+Enter` to the previous, and the
two arrow buttons do the same. `Escape` or the × closes the bar, which is also
what clears the highlighting.
The chord is the browser one rather than this app's usual `Ctrl+Shift`, and it
is claimed only while a web pane has focus. In a terminal `Ctrl+F` is an
ordinary control character that the program running there is waiting for —
forward-a-character in a readline prompt, the prefix key in tmux — so the key
is left alone there.
WebKit does the searching, and it will only tell you the total number of
matches, not which one you are on; the count stops at a thousand, on the
grounds that a page with more matches than that is one where the exact number
tells you nothing.
## Tab settings
Right-clicking a tab row opens a small menu: **Rename**, which is the same
@@ -682,8 +704,8 @@ This is a proof of concept, and the following are deliberately absent:
look right.
- **Moving panes between tabs.** Panes can only be rearranged within their
own view.
- **Browser furniture.** Web panes get navigation and an address bar and
nothing else: no bookmarks, history, downloads, devtools, or find-in-page,
- **Browser furniture.** Web panes get navigation, an address bar and
find-in-page, and nothing else: no bookmarks, history, downloads or devtools,
and each pane uses WebKit's default context, so nothing is persisted between
runs. Links that ask for a new window are ignored rather than opening a pane.
- **Restoring a session.** [Startup tabs](#startup-tabs) reopen the