## 概要
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のイベントも拾ってしまう]]
- 📖**ノウハウ**
- 💁**トラブルシューティング**
- 🗃**用語定義**