## 概要 https://twitter.com/FScoward/status/1645718705513566208?s=20 - [[macOS]]と標準の日本語入力で再現するらしい - [[macOS]]持っていないので分からず... - [[Windows]]だと再現しない ([[Google日本語入力]] / [[Microsoft IME]]) - [[iPadOS]]だと再現しない (標準の日本語入力) - [[Quick switcher]]だと再現しない - [[Sandbox vault]]でも再現する - 以前は発生しなかった - 環境情報 1. macOS Ventura 13.3.1 2. [[Obsidian]]: 1.1.16 (Installer 0.15.8) 3. [[🦉Another Quick Switcher]]: "8.9.0", ## 調査と対応 [[Obsidian]]のイベントハンドラに問題がないと仮定すると、他に制御すべきはkeyのハンドラーである。 - デフォルトのキーバインドは`Enter` - カスタムは`ENTER` となっており、`Enter`かどうかで[[Obsidian]]や[[CodeMirror 6]]、日本語入力ソフト、もしくは[[OS]] ([[Safari]])が制御しているなら可能性はかなり高い。 ```ts export function capitalizeFirstLetter(str: string): string { return str.charAt(0).toUpperCase() + str.slice(1); } ``` ```diff - this.scope.register(x.modifiers, x.key.toUpperCase(), (evt) => { + this.scope.register(x.modifiers, capitalizeFirstLetter(x.key), (evt) => { ``` 関係なかった。。 実際にデフォルトのfunctionを見てみるとこんな記述が... やはり `isComposing`!! ```json n.register([], "Enter", (function(t) { if (!t.isComposing) return i.useSelectedItem(t), !1 } ``` `registerKeys`を以下のように `if (!evt.isComposing)` することで解決。 ```ts private registerKeys( key: keyof Hotkeys["grep"], handler: () => void | Promise<void> ) { this.settings.hotkeys.grep[key]?.forEach((x) => { this.scope.register(x.modifiers, capitalizeFirstLetter(x.key), (evt) => { if (!evt.isComposing) { evt.preventDefault(); handler(); return false; } }); }); } ``` - [x] ダイアログごとの対応状況 - [x] Main Modal - [x] Move Modal - [x] Header Modal - [x] Grep Modal [[📝Another Quick Switcherのダイアログで押下したキーイベントがエディタに貫通する問題]] も追加。 ## MOC - 📚**ドキュメント** - 📒**関連** - [[📝JavaScriptでaddEventListnerを使ってkeydownやkeyupのEnterイベントにlistnerをセットすると、IME(日本語入力)がONのイベントも拾ってしまう]] - 📖**ノウハウ** - 💁**トラブルシューティング** - 🗃**用語定義**