detached c17152b

docs(config): document the opt-in hint.enable key

commit
c17152b76ac55e2fa670740674041694efca614a
author
brice · · 2026-10-19 15:01 UTC
parent
d5dd8bf
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +10 -3
M docs/config.md +8 -3
@@ -55,6 +55,7 @@ See [examples/config](../examples/config) for every key with its default.
5555 | `focus.flash-opacity` | `0.6` | Starting opacity of the flash, `0.1` to `1` |
5656 | `focus.flash-duration` | `200ms` | Fade duration, `50ms` to `1s`; not scaled by `animations.speed` |
5757 | `focus.flash-color` | `border.active` | Flash color `#rrggbb`; empty uses `border.active` |
58+| `hint.enable` | `off` | Turn on the experimental [hint mode](#hint-mode) (restart required) |
5859 | `hint.targets` | `clickable` | What [hint mode](#hint-mode) labels: `clickable` (links, URLs and buttons) or `links` (links and URLs only) |
5960 | `hint.text-click` | `ctrl+shift` | Modifiers held for clicks on links found by OCR (terminals open links on a modified click); `none` sends a plain click |
6061 | `hint.size` | `auto` | Label text size in logical pixels (positive number), or `auto` for screen pixel density |
@@ -304,6 +305,10 @@ Otherwise, left from the first column unfolds the stash. Up/down walk the cards,
304305
305306 ## Hint mode
306307
308+Hint mode is experimental and off by default: set `hint.enable = on` and restart NeferWL.
309+While it is off, nothing of hint mode runs or uses memory, and the `hint` bind
310+logs a notice once and does nothing. A reload does not change it.
311+
307312 `hint` labels the links and buttons on the focused output. Type a label to
308313 click its target; BackSpace erases a letter, Escape cancels. No bind is set
309314 by default; for example `bind.cmd+g = hint`.
@@ -332,9 +337,9 @@ or low-contrast text.
332337 - Chromium: `--force-renderer-accessibility`
333338 - Electron: `ACCESSIBILITY_ENABLED=1`
334339 - Qt: `QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1`
335-- OCR: `tesseract` and `tesseract-data-eng`. Without them, only apps with
336- accessibility get labels.
340+- OCR: `tesseract` and `tesseract-data-eng`. Without tesseract, OCR is off
341+ and hint mode labels only apps that expose the accessibility tree.
337342
338343 ### Debugging hint mode
339344
340-With `NEFERWL_HINT_DEBUG=1` set when NeferWL starts (for example `NEFERWL_HINT_DEBUG=1 make tty`, or the variable in the launch environment), every successful scan writes three files to `$XDG_STATE_HOME/neferwl/hints/` (`~/.local/state/neferwl/hints/` when unset): `<time>-<output>.png`, the frame as scanned; `<time>-<output>.annotated.png`, the same with each target outlined (OCR links green, accessibility targets magenta, OCR window crops grey); and `<time>-<output>.json`, the targets (with their `source`, `atspi` or `ocr`) and timings. NeferWL keeps the 50 most recent scans and logs a warning at startup. The files contain the screen in clear: delete them after use.
345+With `hint.enable = on` and `NEFERWL_HINT_DEBUG=1` set when NeferWL starts (for example `NEFERWL_HINT_DEBUG=1 make tty`, or the variable in the launch environment), every successful scan writes three files to `$XDG_STATE_HOME/neferwl/hints/` (`~/.local/state/neferwl/hints/` when unset): `<time>-<output>.png`, the frame as scanned; `<time>-<output>.annotated.png`, the same with each target outlined (OCR links green, accessibility targets magenta, OCR window crops grey); and `<time>-<output>.json`, the targets (with their `source`, `atspi` or `ocr`) and timings. NeferWL keeps the 50 most recent scans and logs a warning at startup. The files contain the screen in clear: delete them after use.
@@ -55,6 +55,7 @@ See [examples/config](../examples/config) for every key with its default.
55 | `focus.flash-opacity` | `0.6` | Starting opacity of the flash, `0.1` to `1` |55 | `focus.flash-opacity` | `0.6` | Starting opacity of the flash, `0.1` to `1` |
56 | `focus.flash-duration` | `200ms` | Fade duration, `50ms` to `1s`; not scaled by `animations.speed` |56 | `focus.flash-duration` | `200ms` | Fade duration, `50ms` to `1s`; not scaled by `animations.speed` |
57 | `focus.flash-color` | `border.active` | Flash color `#rrggbb`; empty uses `border.active` |57 | `focus.flash-color` | `border.active` | Flash color `#rrggbb`; empty uses `border.active` |
58+| `hint.enable` | `off` | Turn on the experimental [hint mode](#hint-mode) (restart required) |
58 | `hint.targets` | `clickable` | What [hint mode](#hint-mode) labels: `clickable` (links, URLs and buttons) or `links` (links and URLs only) |59 | `hint.targets` | `clickable` | What [hint mode](#hint-mode) labels: `clickable` (links, URLs and buttons) or `links` (links and URLs only) |
59 | `hint.text-click` | `ctrl+shift` | Modifiers held for clicks on links found by OCR (terminals open links on a modified click); `none` sends a plain click |60 | `hint.text-click` | `ctrl+shift` | Modifiers held for clicks on links found by OCR (terminals open links on a modified click); `none` sends a plain click |
60 | `hint.size` | `auto` | Label text size in logical pixels (positive number), or `auto` for screen pixel density |61 | `hint.size` | `auto` | Label text size in logical pixels (positive number), or `auto` for screen pixel density |
@@ -304,6 +305,10 @@ Otherwise, left from the first column unfolds the stash. Up/down walk the cards,
304 305
305 ## Hint mode306 ## Hint mode
306 307
308+Hint mode is experimental and off by default: set `hint.enable = on` and restart NeferWL.
309+While it is off, nothing of hint mode runs or uses memory, and the `hint` bind
310+logs a notice once and does nothing. A reload does not change it.
311+
307 `hint` labels the links and buttons on the focused output. Type a label to312 `hint` labels the links and buttons on the focused output. Type a label to
308 click its target; BackSpace erases a letter, Escape cancels. No bind is set313 click its target; BackSpace erases a letter, Escape cancels. No bind is set
309 by default; for example `bind.cmd+g = hint`.314 by default; for example `bind.cmd+g = hint`.
@@ -332,9 +337,9 @@ or low-contrast text.
332 - Chromium: `--force-renderer-accessibility`337 - Chromium: `--force-renderer-accessibility`
333 - Electron: `ACCESSIBILITY_ENABLED=1`338 - Electron: `ACCESSIBILITY_ENABLED=1`
334 - Qt: `QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1`339 - Qt: `QT_LINUX_ACCESSIBILITY_ALWAYS_ON=1`
335-- OCR: `tesseract` and `tesseract-data-eng`. Without them, only apps with340+- OCR: `tesseract` and `tesseract-data-eng`. Without tesseract, OCR is off
336- accessibility get labels.341+ and hint mode labels only apps that expose the accessibility tree.
337 342
338 ### Debugging hint mode343 ### Debugging hint mode
339 344
340-With `NEFERWL_HINT_DEBUG=1` set when NeferWL starts (for example `NEFERWL_HINT_DEBUG=1 make tty`, or the variable in the launch environment), every successful scan writes three files to `$XDG_STATE_HOME/neferwl/hints/` (`~/.local/state/neferwl/hints/` when unset): `<time>-<output>.png`, the frame as scanned; `<time>-<output>.annotated.png`, the same with each target outlined (OCR links green, accessibility targets magenta, OCR window crops grey); and `<time>-<output>.json`, the targets (with their `source`, `atspi` or `ocr`) and timings. NeferWL keeps the 50 most recent scans and logs a warning at startup. The files contain the screen in clear: delete them after use.345+With `hint.enable = on` and `NEFERWL_HINT_DEBUG=1` set when NeferWL starts (for example `NEFERWL_HINT_DEBUG=1 make tty`, or the variable in the launch environment), every successful scan writes three files to `$XDG_STATE_HOME/neferwl/hints/` (`~/.local/state/neferwl/hints/` when unset): `<time>-<output>.png`, the frame as scanned; `<time>-<output>.annotated.png`, the same with each target outlined (OCR links green, accessibility targets magenta, OCR window crops grey); and `<time>-<output>.json`, the targets (with their `source`, `atspi` or `ocr`) and timings. NeferWL keeps the 50 most recent scans and logs a warning at startup. The files contain the screen in clear: delete them after use.
M examples/config +2 -0
@@ -94,6 +94,8 @@ focus.flash-width = 2
9494 focus.flash-opacity = 0.6
9595 focus.flash-duration = 200ms
9696 focus.flash-color =
97+# Hint mode is experimental and off: turn it on here (restart required).
98+# hint.enable = off
9799 # Hint mode labels the links, URLs and buttons on the focused screen:
98100 # clickable (links, URLs and buttons) or links (links and URLs only).
99101 # hint.targets = clickable
@@ -94,6 +94,8 @@ focus.flash-width = 2
94 focus.flash-opacity = 0.694 focus.flash-opacity = 0.6
95 focus.flash-duration = 200ms95 focus.flash-duration = 200ms
96 focus.flash-color =96 focus.flash-color =
97+# Hint mode is experimental and off: turn it on here (restart required).
98+# hint.enable = off
97 # Hint mode labels the links, URLs and buttons on the focused screen:99 # Hint mode labels the links, URLs and buttons on the focused screen:
98 # clickable (links, URLs and buttons) or links (links and URLs only).100 # clickable (links, URLs and buttons) or links (links and URLs only).
99 # hint.targets = clickable101 # hint.targets = clickable

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 25

Tags 10

↑↓ moveenter openesc close