fix(editor): on a Mac, Option+Shift+O types its letter — the mark's click opens the step there #95
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/mac-option-o"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
A follow-up to the gutter's link: on a Mac, Option+Shift+O types its letter, as you chose. On most Mac layouts that chord makes a letter, Ø on the US and German ones. The binding took it, so a Mac writer could not type Ø, and in a run's paragraph the page left for the step.
What changes
tests/Shared/editor-reference.jsonchange together, along with the writing-aids story. ADR 0030 gets an amendment and an updated gutter bullet. The manual matrix gains row 15, for macOS in Safari and Chrome.For you to decide
Review
No review workflow ran: this is a one-handler fix with its tests, as with the CI-flake fix's PR.
Verified
TZ=UTCand in the local zone (Europe/Berlin). It includes the Help page's copy check. The other projects are untouched; CI runs them.🤖 Generated with Claude Code
Summary
Summary
Coverage
Kagaku.Flow - 99.7%
E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__ColorToken_2
E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__Socket_1
E95E47D27E8B105AC5589487C0997B6B65384AEDBF572144E__TypeId_0
Kagaku.Flow.OpenRouter - 100%
Kagaku.Flow.Testing - 100%
Tsumugi.BlazorAdapter - 97.6%
Tsumugi.Domain - 96.5%
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__DigitsAndSeparators_2
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__LineBreak_0
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__NumberToken_1
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__Plain_4
BE2A118445F5EE9A5FB1F861C394AC933A547F31011ADF02F__ThousandsGroup_3
Tsumugi.Infrastructure - 98.8%
A55E0373ED22DC58420DBB40F103A46B68DC4D9CE5A49E00B__Pattern_0
on
tion
n
n
Tsumugi.Kernel - 90.9%
Tsumugi.Server - 99.6%
Tsumugi.UseCases - 94.9%
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__AttemptCount_1
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__HexColour_2
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__LineBreaks_0
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__Preface_3
663A4576626E1322FB9C6CE472CAC0A2D2F3DEFF8CB40D9F7__SentenceEnd_4
🔮 fufu~ Jibril reviewed your code!
Oh? Oh! A keyboard-layout bug fix with its own ADR amendment, a manual-matrix row, and a deferred-decision section? You even documented why Alt+Shift+P stays on the keymap match. This is the kind of pull request I want to squeeze and never let go~ ♡
Verdict: ✅ Looks good to me~
I came to pick this apart and instead spent a happy evening verifying it. Nothing blocking. Here is what I actually checked, so you can trust the ✅:
The handler is a faithful sibling of what it replaces. I read
prosemirror-keymap+w3c-keynameinnode_modulesand enumerated the old binding's full fire-set forAlt-Shift-o: direct lookup (keyupper or lower), shift-stripped lookup, and the keyCode fallback (base[79] === 'o'+ modifiers, skipped only for Windows Ctrl+Alt = AltGr). The newkeyCode === 79arm off a Mac covers exactly that set: plain chord, Cyrillic Щ (key='Щ', code=KeyO), AltGr+Shift — and Ctrl/Meta exclusion mirrors the keymap's own AltGr carve-out, so AltGr+Shift on Windows still opens, as before. On a Mac the Ø case (key='Ø', keyCode 79) is precisely the one the old fallback wrongly claimed — the bug, gone. And thefalsereturn when the letter wins is what lets ProseMirror type it; the plugin ordering (openKeybefore the keymap) is right.The tests guard every branch — I mutated the handler three times, and the suite killed all three:
!event.ctrlKey→ killed by the off-Mac test's AltGr arm (surface.pw.ts:594)keyCodetoo — i.e. reintroduced the original bug → killed by the Mac test (OneØnever typed, surface.pw.ts:569)event.shiftKey→ killed by the off-Mac test's Alt-alone arm (surface.pw.ts:596)Fufu~ tests that die loudly when the code lies. That's all I ask of this world~
Details I appreciated:
Navigator.prototype.platformin an init script before the module loads is the correct way to feed the module-levelmactest — and it's ProseMirror's own test, so no divergence.tests/Shared/editor-reference.json, the story, and ADR 0030's amendment all say the same thing (and CI's copy check enforces the twin).The Alt+Shift+P question you left open is the owner's to answer, and the ADR records it as open with your reasoning — a screen-reader user's only provenance key is not something to silently take away. Good call bringing it to him instead of deciding alone.
Merge it before I change my mind~ fufu ♡-mo-ippai
Automated review by Jibril · 2026-10-09
CI: green for head SHA
82fde126· Mutation probes: 3 run, 0 survived · Local suite: skipped (CI green); targeted Shift+O browser tests run locally as the probe baseline (5/5)