feat(page-mode): add native vim key sequence grammar and accessibility spike - #365
feat(page-mode): add native vim key sequence grammar and accessibility spike#365bnema wants to merge 21 commits into
Conversation
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 39 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (36)
Comment |
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
Vim mode natif — tranche 1 (grammaire clavier) et socle de la tranche 2a (spike accessibilité CEF).
Cette PR est empilée sur
next, après le merge de Page Mode (#364).Périmètre
Le vim mode absorbe Page Mode plutôt que de coexister avec lui : même
ModePage, mêmeCtrl+Y, même arbre de config. Aucun mode nouveau.Ce que la PR livre :
internal/domain/vimkeys— lexer, trie et matcher purs. C'est la brique manquante :ParseKeyStringne connaît que les chords séparés par+, donc3j,]],yah,<C-d>étaient hors de portée.workspace.page_mode.actionsaccepte désormais des séquences multi-touches, avecsequence_timeout_mset détection de collision sur la forme canonique (<CR>/<Return>,J/shift+jcollisionnent).PhaseCapture, avant que les touches n'atteignent le widget OSR.modeToasterexistant :PAGE MODE · y→PAGE MODE · ya→PAGE MODE. Aucun widget créé.AccessibilityHandlerinstallé au wrap du render handler, capture gated parDUMBER_A11Y_CAPTURE=1, activation idempotente une fois par WebView.Ce que la PR ne livre pas, volontairement : aucune motion structurelle n'agit.
SetOnSequenceActionest défini mais non câblé. Une séquence complétée met à jour le toaster et rien d'autre. Les hints, le curseur de bloc et le visual mode appartiennent aux tranches 2b à 5, qui ne seront planifiées qu'après la porte de mesure 2a.Points d'attention pour la revue
GetAccessibilityHandlerque si le handler est non-nil au moment du wrap duRenderHandler. Retourner nil « en attendant » condamne définitivement la callback et rendSetAccessibilityStatesilencieusement sans effet.WriteJsonreste dans la callback UI, un seul appel FFI ; capture, stats et écriture disque partent sur une goroutine dédiée via une queue bornée non bloquante.popup_opener_renderer.goetrenderer_bridge.gone sont pas touchés, aucune extension V8 niOnWebKitInitializedréactivé.AccessibilityEnablerest une capacité optionnelle, pas un élargissement de l'interfaceWebViewcommune à WebKit — même modèle quePageScrollCanceler.2]]transporte un count,3jretombe sur le scroll legacy sans l'appliquer. Le trie ne possède que les séquences que le lexer legacy ne sait pas lire ; les liaisons simples restent dans le chemin Page Mode existant. L'unification appartient à la tranche 2b.Vérifications
make testgolangci-lint run --new-from-rev=origin/nextinternal/domain/vimkeysgo list -deps)Validation runtime par le propriétaire le 2026-07-31, build CEF réel :
Ctrl+Yentre en Page Mode,ypuisafont vivre le toaster,yahse complète sans que lehfinal ne scrolle vers la gauche,j/kscrollent comme avant,Escapeannule sans effet de bord.Compatibilité
Changement additif. Aucune assertion préexistante retirée ni affaiblie — deux modifications de tests seulement, toutes deux prévues par le plan : le compteur
assert.Len(t, bindings, 8)passe à19(les huit assertions historiques restent), et une liste de variables locales est étendue pour couvrirsequence_timeout_msetpreload_accessibility.Les configs existantes restent valides : une liaison à un seul atome avec modificateurs est exactement le cas chord actuel.
Suite
La phase 5 du plan — la campagne de mesure 2a sur cinq pages réelles — reste à exécuter. Elle tranchera les deux inconnues structurelles dont dépendent les tranches 2b à 5 : les rects de
OnAccessibilityLocationChange, et l'espace de coordonnées des bounding boxes.