rename: att -> att_browser

This commit is contained in:
2026-10-17 11:38:55 +02:00
parent 495a0696ba
commit 483b3f87ba
11 changed files with 97 additions and 49 deletions
+20 -15
View File
@@ -1,10 +1,10 @@
# att
# att_browser
A small, keyboard-driven QtWebEngine browser in the spirit of qutebrowser.
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
opens or closes a tab, att_browser opens or closes a window, and your window manager
does the tabbing. No config file yet.
## Running
@@ -20,7 +20,7 @@ nix run . -- news.ycombinator.com
nix develop
cmake -B build -G Ninja
cmake --build build
./build/att
./build/att_browser
```
The dev shell exports `QT_PLUGIN_PATH`, `QML2_IMPORT_PATH` and
@@ -45,7 +45,7 @@ Like qutebrowser, keys mean different things depending on the mode:
leaves fullscreen when a page (e.g. a YouTube video) is fullscreen. The status bar
is hidden while a page is fullscreen.
> Note: unlike qutebrowser, att does not yet auto-switch to insert mode when you
> Note: unlike qutebrowser, att_browser does not yet auto-switch to insert mode when you
> click into a text field on a page — press `i` first. Doing it automatically
> needs a JS focus-tracking script over QWebChannel; see *Next steps*.
@@ -62,7 +62,8 @@ is hidden while a page is fullscreen.
| `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 |
| `j` `k` | scroll down / up 25 CSS px (`scroll-px 0 ±25`) |
| `h` `l` | scroll left / right |
| `Ctrl-d/u` | scroll half a page |
| `Ctrl-f/b` | scroll a full page |
| `gg` / `G` | jump to top / bottom |
@@ -94,17 +95,20 @@ shadow DOM yet.
## Browsing data
Browsing history is kept in `~/.local/share/att/att/history.sqlite` (tables
Browsing history is kept in `~/.local/share/att_browser/history.sqlite` (tables
`visits`, one row per page load, and `urls`, one row per URL for completion).
A page is recorded once it finishes loading, so redirect hops and in-page
`#anchor` jumps don't create entries. `:history-clear` empties it.
Cookies, local storage and Chromium's own state are kept in a persistent QtWebEngine profile
under `~/.local/share/att/att/QtWebEngine/default` (the cache is in
`~/.cache/att/att/`). Session cookies are saved too, like qutebrowser's
under `~/.local/share/att_browser/QtWebEngine/default` (the cache is in
`~/.cache/att_browser/`). Session cookies are saved too, like qutebrowser's
`content.cookies.store`, so you stay logged in across restarts. Delete that
directory to start fresh.
Before the rename to att_browser, this data lived in `~/.local/share/att/att` and
`~/.cache/att/att`. The first start moves it to the new locations.
## Adblocking
Network requests are checked against EasyList and EasyPrivacy with Brave's
@@ -114,15 +118,15 @@ no cosmetic filtering (element hiding), so ads served from the site's own URLs
still get through.
The lists are downloaded on first start and compiled into
`~/.local/share/att/att/adblock-cache.dat`, which later starts just load.
`~/.local/share/att_browser/adblock-cache.dat`, which later starts just load.
`:adblock-update` re-downloads them. `:adblock-toggle` switches blocking off and
on, for when a site breaks.
## Greasemonkey
Userscripts go in `~/.local/share/att/att/greasemonkey/` as `*.js` files. They
Userscripts go in `~/.local/share/att_browser/greasemonkey/` as `*.js` files. They
are loaded at startup; after changing them, run `:greasemonkey-reload` and reload
the page. Like qutebrowser, att:
the page. Like qutebrowser, att_browser:
- runs scripts in the page's own JavaScript context (so `unsafeWindow` is just
`window`), in iframes too unless `@noframes` is set;
@@ -144,7 +148,7 @@ supported. `GM_openInTab` does nothing until new-window requests are handled.
## Security
On top of Chromium's own protections, att:
On top of Chromium's own protections, att_browser:
- blocks third-party cookies, which stops most cross-site tracking. A few embedded
logins (e.g. some comment widgets) may stop working.
@@ -186,13 +190,13 @@ and platform.
Chrome and Edge claim the engine's real Chromium major version (as qutebrowser
does), so sites don't use features the engine lacks. The Firefox and Safari
versions are pinned in `src/useragent.cpp`. Those presets only change what att
versions are pinned in `src/useragent.cpp`. Those presets only change what att_browser
says, not how it behaves: Chromium's low-entropy client hints still name
Chromium, and feature detection still sees Chromium.
## Settings
att has no config file yet. The settings live in `src/config.h`, named after
att_browser has no config file yet. The settings live in `src/config.h`, named after
their qutebrowser equivalents; change them there and rebuild:
| Setting | Default | Meaning |
@@ -201,7 +205,8 @@ their qutebrowser equivalents; change them there and rebuild:
| `zoom.levels` | 25%, 33%, 50%, … 125%, 150%, … 500% | the steps `+` / `-` move through |
| `content.cookies.accept` | no third-party | `kBlockThirdPartyCookies` |
| `content.pdfjs` | on | `kPdfViewer`: Chromium's PDF viewer |
| `content.headers.user_agent` | `chrome-linux` | `kUserAgent`: the preset att starts with |
| `j` / `k` step (`scroll-px`) | 25 CSS px | `kScrollStepPx`; grows with the zoom |
| `content.headers.user_agent` | `chrome-linux` | `kUserAgent`: the preset att_browser starts with |
## Commands