## 事象 以下のようなコードについて。 ```ts this.suggestions.setSelectedItem(this.suggestions.selectedItem - 1, true); ``` v0.15.xのときは問題なく動作していた(前の候補に移動できた)が、v0.16.0からは移動した瞬間に候補が閉じてしまう。 ## 原因 `setSelectedItem`の仕様が変わっていた。 - v0.15.xでは `setSelectedItem(index: number, scroll: boolean)` - v0.16.0では `setSelectedItem(index: number, event: KeyboardEvent)` ## 解決方法 `setSelectedItem`の第2引数に入れる値を[[KeyboardEvent]]型の値に変更する。`scope.register`に指定されるコールバックは`KeymapEventListener`型であり、[[obsidian.d.ts]]を見ると第1引数に渡される。それを使えばよい。 ```ts export type KeymapEventListener = (evt: KeyboardEvent, ctx: KeymapContext) => false | any; ``` 例 ```ts const selectNext = (evt: KeyboardEvent) => { this.suggestions.setSelectedItem(this.suggestions.selectedItem + 1, evt); return false; }; this.scope.register([], "ArrowDown", selectNext), ``` ## 参考 [[EditorSuggest]]のデフォルトキーバインド初期化処理を除いてみた。 ```ts }(FB) , NB = function() { function e(e, t, n) { var i = this; ... this.selectedItem = 0, var r = function(e) { if (!e.isComposing) return i.setSelectedItem(i.selectedItem - 1, e), !1 } , o = function(e) { if (!e.isComposing) return i.setSelectedItem(i.selectedItem + 1, e), !1 }; n.register([], "ArrowUp", r), n.register([], "ArrowDown", o), ... ``` `i.setSelectedItem`の呼び出し箇所を見ると、第2引数に`e`を渡している。`e`は[[KeyboardEvent]]であるため、以前とは`setSelectedItem`のシグニチャが変わっていることが分かる。この通りに改修すればよい。