detached c8b70f3

docs(page-mode): align scrolling and mode feedback

commit
c8b70f38f54991af6bb9959f1eb7fde282937333
author
brice · · 2026-07-29 05:04 UTC
parent
e70f71d
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
3 files · +10 -6
M docs/config/index.md +3 -2
@@ -448,7 +448,7 @@ Notes:
448448 - Arrow keys still use the browser engine's native page-navigation path while Page Mode is active.
449449 - Other app-level shortcuts stay suspended until Page Mode exits, except for the Page Mode toggle itself.
450450 - `workspace.styling.pane_mode_color`, `workspace.styling.transition_duration`, and `workspace.styling.mode_indicator_toaster_enabled` control the pane-local Page Mode visuals.
451-- Scroll execution depends on the engine: CEF uses native Chromium key events (arrow keys, Page Up/Down) for all six scroll commands; WebKit falls back to JavaScript scroll delta injection.
451+- Scroll execution: CEF and WebKit both use the shared `BuildScrollByJS` resolver when the page is ready. Each step starts under the viewport center, walks up through ancestors that can move in the requested direction, and hands scrolling to the document when a nested container reaches its boundary. The application repeater owns held-key cadence; each engine executes one immediate scroll step per tick. Cross-origin frame contents remain best-effort. CEF may use native precision-wheel input only as a pre-frame fallback before the browser/main frame is ready.
452452
453453 ### Resize Mode
454454
@@ -585,10 +585,11 @@ desc = "Open floating pane on GitHub"
585585 | `workspace.styling.tab_mode_color` | string | `"#FFA500"` | Tab mode color (orange) - used for border and toaster |
586586 | `workspace.styling.session_mode_color` | string | `"#9B59B6"` | Session mode color (purple) - used for border and toaster |
587587 | `workspace.styling.resize_mode_color` | string | `"#00D4AA"` | Resize mode color (teal) - used for border and toaster |
588-| `workspace.styling.mode_indicator_toaster_enabled` | bool | `true` | Show toaster notification when modal modes are active; Page mode uses it only as brief secondary feedback |
588+| `workspace.styling.mode_indicator_toaster_enabled` | bool | `true` | Show bottom-left mode toaster when modal modes are active; Page Mode keeps a persistent `PAGE MODE` indicator until exit or toggle off |
589589 | `workspace.styling.transition_duration` | int | `120` | Border and pulse transition duration (ms) |
590590
591591 **Example:**
592+
592593 ```toml
593594 [workspace.styling]
594595 border_width = 1
@@ -448,7 +448,7 @@ Notes:
448 - Arrow keys still use the browser engine's native page-navigation path while Page Mode is active.448 - Arrow keys still use the browser engine's native page-navigation path while Page Mode is active.
449 - Other app-level shortcuts stay suspended until Page Mode exits, except for the Page Mode toggle itself.449 - Other app-level shortcuts stay suspended until Page Mode exits, except for the Page Mode toggle itself.
450 - `workspace.styling.pane_mode_color`, `workspace.styling.transition_duration`, and `workspace.styling.mode_indicator_toaster_enabled` control the pane-local Page Mode visuals.450 - `workspace.styling.pane_mode_color`, `workspace.styling.transition_duration`, and `workspace.styling.mode_indicator_toaster_enabled` control the pane-local Page Mode visuals.
451-- Scroll execution depends on the engine: CEF uses native Chromium key events (arrow keys, Page Up/Down) for all six scroll commands; WebKit falls back to JavaScript scroll delta injection.451+- Scroll execution: CEF and WebKit both use the shared `BuildScrollByJS` resolver when the page is ready. Each step starts under the viewport center, walks up through ancestors that can move in the requested direction, and hands scrolling to the document when a nested container reaches its boundary. The application repeater owns held-key cadence; each engine executes one immediate scroll step per tick. Cross-origin frame contents remain best-effort. CEF may use native precision-wheel input only as a pre-frame fallback before the browser/main frame is ready.
452 452
453 ### Resize Mode453 ### Resize Mode
454 454
@@ -585,10 +585,11 @@ desc = "Open floating pane on GitHub"
585 | `workspace.styling.tab_mode_color` | string | `"#FFA500"` | Tab mode color (orange) - used for border and toaster |585 | `workspace.styling.tab_mode_color` | string | `"#FFA500"` | Tab mode color (orange) - used for border and toaster |
586 | `workspace.styling.session_mode_color` | string | `"#9B59B6"` | Session mode color (purple) - used for border and toaster |586 | `workspace.styling.session_mode_color` | string | `"#9B59B6"` | Session mode color (purple) - used for border and toaster |
587 | `workspace.styling.resize_mode_color` | string | `"#00D4AA"` | Resize mode color (teal) - used for border and toaster |587 | `workspace.styling.resize_mode_color` | string | `"#00D4AA"` | Resize mode color (teal) - used for border and toaster |
588-| `workspace.styling.mode_indicator_toaster_enabled` | bool | `true` | Show toaster notification when modal modes are active; Page mode uses it only as brief secondary feedback |588+| `workspace.styling.mode_indicator_toaster_enabled` | bool | `true` | Show bottom-left mode toaster when modal modes are active; Page Mode keeps a persistent `PAGE MODE` indicator until exit or toggle off |
589 | `workspace.styling.transition_duration` | int | `120` | Border and pulse transition duration (ms) |589 | `workspace.styling.transition_duration` | int | `120` | Border and pulse transition duration (ms) |
590 590
591 **Example:**591 **Example:**
592+
592 ```toml593 ```toml
593 [workspace.styling]594 [workspace.styling]
594 border_width = 1595 border_width = 1
M docs/getting-started.md +6 -3
@@ -40,9 +40,12 @@ Page Mode stays local to the active pane and automatically leaves the mode when
4040 6. Press `Escape` or `Enter` to leave the mode
4141 7. If a page input or editor is already focused, `Ctrl+Y` is passed through instead of stealing the keypress
4242
43-> **Engine behavior**: CEF sends native arrow key and Page Up/Down events for
44-> scroll execution, matching Chromium's built-in scroll behaviour. WebKit uses
45-> JavaScript scroll delta injection as a fallback.
43+> **Engine behavior**: CEF and WebKit execute Page Mode scroll steps with the
44+> shared `BuildScrollByJS` resolver (viewport-center start, nested-scroller
45+> handoff, document fallback). The application repeater owns held-key cadence;
46+> each engine runs one immediate step per tick. Cross-origin frames are
47+> best-effort. CEF may use native precision-wheel input only before the browser
48+> frame is ready.
4649
4750 ## Omnibox
4851
@@ -40,9 +40,12 @@ Page Mode stays local to the active pane and automatically leaves the mode when
40 6. Press `Escape` or `Enter` to leave the mode40 6. Press `Escape` or `Enter` to leave the mode
41 7. If a page input or editor is already focused, `Ctrl+Y` is passed through instead of stealing the keypress41 7. If a page input or editor is already focused, `Ctrl+Y` is passed through instead of stealing the keypress
42 42
43-> **Engine behavior**: CEF sends native arrow key and Page Up/Down events for43+> **Engine behavior**: CEF and WebKit execute Page Mode scroll steps with the
44-> scroll execution, matching Chromium's built-in scroll behaviour. WebKit uses44+> shared `BuildScrollByJS` resolver (viewport-center start, nested-scroller
45-> JavaScript scroll delta injection as a fallback.45+> handoff, document fallback). The application repeater owns held-key cadence;
46+> each engine runs one immediate step per tick. Cross-origin frames are
47+> best-effort. CEF may use native precision-wheel input only before the browser
48+> frame is ready.
46 49
47 ## Omnibox50 ## Omnibox
48 51
M docs/reference/keybindings.md +1 -1
@@ -55,7 +55,7 @@ Keybinding tables use uppercase letters as visual labels for unshifted letter ke
5555
5656 ## Page Mode (`Ctrl+Y`)
5757
58-Page Mode is an explicit page-scrolling mode for the active pane only. It shows a local `PAGE` indicator on the owning pane, uses `workspace.styling.pane_mode_color` for the local accent, and exits automatically when focus moves into the omnibox, find bar, overlays, or an editable element inside the page. The default `timeout_ms` is `0`, so Page Mode does not auto-time out unless you configure one. Arrow keys continue to flow through the browser engine's native page-navigation path while Page Mode is active, while other app-level shortcuts stay suspended until you leave the mode.
58+Page Mode is an explicit page-scrolling mode for the active pane only. It applies a pane-local accent from `workspace.styling.pane_mode_color`, and when `workspace.styling.mode_indicator_toaster_enabled` is true, shows a persistent bottom-left `PAGE MODE` toaster while the mode is active; the toaster hides on exit, when the mode is toggled off, or when the toaster is disabled in config. The mode exits automatically when focus moves into the omnibox, find bar, overlays, or an editable element inside the page. The default `timeout_ms` is `0`, so Page Mode does not auto-time out unless you configure one. Arrow keys continue to flow through the browser engine's native page-navigation path while Page Mode is active, while other app-level shortcuts stay suspended until you leave the mode.
5959
6060 CEF and WebKit execute Page Mode scroll commands (`h/j/k/l`, `Shift+J/K`) with the shared `BuildScrollByJS` resolver. Each step starts under the viewport center, walks up through ancestors that can move in the requested direction, and hands scrolling to the document when a nested container reaches its boundary. Cross-origin frame contents remain best-effort.
6161
@@ -55,7 +55,7 @@ Keybinding tables use uppercase letters as visual labels for unshifted letter ke
55 55
56 ## Page Mode (`Ctrl+Y`)56 ## Page Mode (`Ctrl+Y`)
57 57
58-Page Mode is an explicit page-scrolling mode for the active pane only. It shows a local `PAGE` indicator on the owning pane, uses `workspace.styling.pane_mode_color` for the local accent, and exits automatically when focus moves into the omnibox, find bar, overlays, or an editable element inside the page. The default `timeout_ms` is `0`, so Page Mode does not auto-time out unless you configure one. Arrow keys continue to flow through the browser engine's native page-navigation path while Page Mode is active, while other app-level shortcuts stay suspended until you leave the mode.58+Page Mode is an explicit page-scrolling mode for the active pane only. It applies a pane-local accent from `workspace.styling.pane_mode_color`, and when `workspace.styling.mode_indicator_toaster_enabled` is true, shows a persistent bottom-left `PAGE MODE` toaster while the mode is active; the toaster hides on exit, when the mode is toggled off, or when the toaster is disabled in config. The mode exits automatically when focus moves into the omnibox, find bar, overlays, or an editable element inside the page. The default `timeout_ms` is `0`, so Page Mode does not auto-time out unless you configure one. Arrow keys continue to flow through the browser engine's native page-navigation path while Page Mode is active, while other app-level shortcuts stay suspended until you leave the mode.
59 59
60 CEF and WebKit execute Page Mode scroll commands (`h/j/k/l`, `Shift+J/K`) with the shared `BuildScrollByJS` resolver. Each step starts under the viewport center, walks up through ancestors that can move in the requested direction, and hands scrolling to the document when a nested container reaches its boundary. Cross-origin frame contents remain best-effort.60 CEF and WebKit execute Page Mode scroll commands (`h/j/k/l`, `Shift+J/K`) with the shared `BuildScrollByJS` resolver. Each step starts under the viewport center, walks up through ancestors that can move in the requested direction, and hands scrolling to the document when a nested container reaches its boundary. Cross-origin frame contents remain best-effort.
61 61

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 8

Tags 42

↑↓ moveenter openesc close