自動補完のメニューで矢印キーが機能しない

バグ報告

プラグインの開発でCodeMirrorの自動補完(https://codemirror.net/demo/complete.html)を実装しています。
補完候補のメニューを表示した後、上下の矢印キーで選択を切り替えようとすると、メニューが閉じてしまい候補が選択できません。

利用環境

  • Platform: macOS
  • Platform version: Catalina 10.15.3
  • App Version: 4.6.0

再現方法

  1. サンプルコードをクローン
    git clone https://github.com/seachicken/example-inkdrop-hint.git
    cd example-inkdrop-hint
    ipm link --dev
    
  2. InkdropをReload
  3. Noteの任意の行で、Ctrl+Spaceを押す(「a, b」の補完候補が表示される)
  4. 上下の矢印キーを押す

Seitoさん

こんにちは、プラグインの開発ありがとうございます!
アプリの仕様上、キー操作はすべてコマンドで定義して、keymaps.jsonでバインドする必要があります。
それがユーザによるカスタマイズを可能にします。
例えばvimプラグインは以下のように全てのキー操作をコマンドで定義して紐付けています:

同様に、補完候補の選択操作キーもコマンド化する必要があります。
つまり、editor.cm.setOption('extraKeys', ...)は使わないでください。
関連ドキュメント:

例(vimプラグインから抜粋):

import { CompositeDisposable, Disposable } from 'event-kit'

const disposables = new CompositeDisposable()
const editor = inkdrop.getActiveEditor()
const { cm } = editor
const wrapper = cm.getWrapperElement()

const handlers = {
  'your_plugin:show-hint': () => // ...
}
disposables.add(inkdrop.commands.add(wrapper, handlers))

なるほど、コマンドを定義するんですね!
ユーザのカスタマイズ性についても理解できました、ありがとうございます :smile:

1 Like