# Case1
https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/issues/106
問題のコード。`Ctrl+-`でズームアウトが貫通する。
```ts
this.scope.register(["Mod"], "-", () =>
this.chooseCurrentSuggestion("new-pane-horizontal");
);
```
## 問題が発生しない例
```ts
this.scope.register(["Mod"], "-", () => {
this.close();
return false;
});
```
## 問題が発生する例
```ts
this.scope.register(["Mod"], "-", () =>
// Promise<boolean>を返す
this.chooseCurrentSuggestion("new-pane-horizontal");
);
```
```ts
this.scope.register(["Mod"], "-", async () => {
this.close();
return false;
});
```
## 原因
`register`の第3引数がbooleanを返していないから。`Promise<boolean>`はNG。
他の非同期処理を待ってしまうと、キーイベントがその完了より前に拾われているような気がする。
## 対策
非同期処理を無視して、`false`を返す。(動きの実害も多分ないはず...)
つまり
```ts
this.scope.register(["Mod"], "-", () => {
// Promise<boolean>を返す
this.chooseCurrentSuggestion("new-pane-horizontal");
// 上記が返却するPromiseがresolveする前に`false`を返す. この時点でキーイベントは止まるはず...
return false
});
```
# Case2
[[macOS]]の場合のみ
> [[📜macOSだと日本語入力中に確定として押したEnterが貫通してAnother Quick Switcherの候補を確定してしまう]]
## 原因
`Enter`キーなどに割り当てたhandlerの中で、[[IME]]操作中であるか否かの分岐をしていなかった。そのため、[[macOS]]のような一部環境では、`Enter`を拾ってhandlerが起動してしまい、[[🦉Another Quick Switcher]]の動作として貫通してしまっていた。
## 対策
[[IME]]操作中であるか否かの分岐を行い、操作中の場合は処理を無効化する。
具体的には以下のような感じ。
```ts
this.scope.register(modifies, key, (evt) => {
// IME操作中でない場合のみ、処理を実行してイベント伝播を停止
if (!evt.isComposing) {
evt.preventDefault();
handler(); // キーに割り当てたい処理
return false;
}
});
```