Contact emails
sambamurt...@microsoft.com
Explainer
https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/Editing/bidi-visual-order-caret-movement-explainer.md
Specification
https://w3c.github.io/selection-api/#dom-selection-modify
Summary
Changes caret movement in bidirectional text from logical order (forward/backward in DOM order based on paragraph direction) to visual order, where pressing Right always moves the caret rightward on screen and Left always moves it leftward, regardless of text or line direction. This applies to both keyboard-driven caret movement and the Selection.modify() API when called with 'left'/'right' directions.
Blink component
Blink
Web Feature ID
Missing feature
Motivation
Chromium currently maps Left/Right arrow keys to logical (forward/backward) movement based on the paragraph's base direction. In bidirectional text (e.g., Arabic or Hebrew mixed with Latin), this causes the caret to move in the opposite visual direction or jump unpredictably at script boundaries.
For example, in <p dir="ltr">Hello שלום world</p>, pressing Right while inside the Hebrew run moves the caret visually leftward, opposite to user expectation.
Firefox and Safari already default to visual caret movement. Chromium is the only major browser that still uses logical movement. A usability study with Arabic–English bilingual users confirmed the overwhelming expectation is visual movement.
This feature aligns Chromium with the cross-browser and cross-platform consensus (Firefox, Safari, macOS TextKit, GTK) and makes Selection.modify() with 'left'/'right' behave as true visual directions. The spec already defines these as visual, but steps 7–8 of modify() incorrectly use "inline base direction"; an in-progress spec fix (
https://github.com/w3c/selection-api/pull/357) corrects this to use "resolved text direction at the focus", matching Firefox/Safari behavior.
Initial public proposal
No information provided
Search tags
bidi,
caret,
movement,
bidirectional
Goals for experimentation
None
Requires code in //chrome?
False
Tracking bug
https://issues.chromium.org/issues/499819853
Estimated milestones
No milestones specified
Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5074816756482048?gate=5068203748360192