add multiple windows support with shared session, add shortcuts

This commit is contained in:
2026-10-15 23:57:13 +02:00
parent b23e838957
commit b6020a4354
7 changed files with 194 additions and 41 deletions
+16 -9
View File
@@ -2,8 +2,10 @@
A small, keyboard-driven QtWebEngine browser in the spirit of qutebrowser.
This is the skeleton: one window, one page, a qutebrowser-style status line and
`:` command line, `f` link hints and adblocking. No tabs and no config file yet.
One page per window, a qutebrowser-style status line and `:` command line, `f`
link hints and adblocking. There is deliberately no tab bar: where qutebrowser
opens or closes a tab, att opens or closes a window, and your window manager
does the tabbing. No config file yet.
## Running
@@ -52,9 +54,12 @@ is hidden while a page is fullscreen.
| Key | Action |
| -------------- | ---------------------------------------- |
| `o` | open the command line prefilled `:open ` |
| `O` | same, prefilled with the current URL |
| `O` | same, but opens in a new window (`-w`) |
| `go` / `gO` | edit the current URL, here / new window |
| `d` | close this window |
| `:` | open a bare command line |
| `i` | enter insert mode |
| `gi` | focus the first text field, insert mode |
| `f` | hint mode: follow a link by its label |
| `Escape` | back to normal mode |
| `h` `j` `k` `l`| scroll |
@@ -80,8 +85,7 @@ on the command line; `Enter` opens it.
(`asdfghjkl`). Type a label to click it; `Backspace` undoes a letter, `Escape`
cancels. The click is a real mouse event sent to the render widget, so it works
on sites that ignore `element.click()`. Following a text field drops you into
insert mode. Links that would open a new window are opened in place, since there
are no tabs yet.
insert mode. Links that would open a new window are opened in place for now.
The hint script runs in `QWebEngineScript::ApplicationWorld`, so the page's own
JavaScript can't see or interfere with it. It doesn't descend into iframes or
@@ -115,8 +119,10 @@ on, for when a site breaks.
## Commands
`:open <url|query>` (alias `:o`), `:quit` (alias `:q`), `:reload`, `:back`,
`:forward`, `:stop`, `:history-clear`, `:adblock-update`, `:adblock-toggle`.
`:open [-w] <url|query>` (alias `:o`; `-w`, or qutebrowser's `-t`, opens a new
window), `:close` (alias `:tab-close`, closes this window), `:quit` (alias `:q`,
closes all windows), `:reload`, `:back`, `:forward`, `:stop`, `:history-clear`,
`:adblock-update`, `:adblock-toggle`.
`:open` accepts a full URL, a bare host (`example.com` → `https://example.com`),
an existing local path, or free text, which goes to DuckDuckGo.
@@ -145,10 +151,11 @@ parent window never sees them otherwise.
## Next steps
- Tabs (`QTabWidget` + a per-tab `QWebEngineView`), `gt`/`gT`, `d` to close.
- Open `target=_blank` links, `window.open` and middle-clicks in new windows
(`QWebEnginePage::newWindowRequested`).
- Auto insert mode: inject a `QWebEngineScript` that reports `focusin` /
`focusout` on editable elements back over `QWebChannel`.
- More hint modes: `F` (new tab, once there are tabs), `;y` to yank a link.
- More hint modes: `F` (follow in a new window), `;y` to yank a link.
- `/` and `?` search with `n`/`N`, using `QWebEnginePage::findText`.
- A config file for bindings, start page and search engine.
- Counts before commands (`3j`) and a proper command parser with completion.