選択されたノートブックに応じてキーバインドの動作を変更したい

この要望がでた背景は、以下のような事があった為です。

背景

ノートを作成する場合にデフォルトのテンプレートを設定したい。

20220830_001

01.dev_note用のテンプレート

# 題名

サンプルコード

 !```code

 !```

02.meeting用のテンプレート

# 打合せ題名

## 開催日時
## 参加者
## 場所
## 内容
- 

azu/inkdrop-note-templates
上記でテンプレートの設定は行えるが、Ctrl+Nで作成するときにノートに合わせたテンプレートが自動で適用されてほしい。
(これが開いている場所によって作成するテンプレートを判断して動作を変えるなら問題なかった。)

'body':
  'ctrl-shift-m': 'inkdrop-note-templates:meeting-note'

等でテンプレートを使用して作成はできるが、テンプレートの数分ショートカットを覚えるのが手間。

Ctrl-Nのキーバインドそのものをオーバーライトして、ノート単位で作成されるテンプレートを設定できれば楽なのに・・・

ctrl-n	core:new-note	Core	body

要望

デフォルトキーバインドをノート単位(02.meeting等)にオーバーライトできるような機能が欲しいです。

00.Inbox(keymap.cson)

core:new-note	

01.dev_note(dev_keymap.cson)

'body':
  'ctrl-n': 'inkdrop-note-templates:dev_note_template'

02.meeting(meeting_keymap.cson)

'body':
  'ctrl-n': 'inkdrop-note-templates:meeting_note_template'

デフォルトのkeymap.csonを基準として、各ノート事に必要な個所だけオーバーライドできれば問題ありません。

また、これができれば、pluginをノート単位のショートカットで使えるので助かります。

01.dev_note

ctrl-shift-n: 'plugin_001'

02.meeting

ctrl-shift-n: 'plugin_002'

Atsushiさん

ご質問ありがとうございます。
選択されたノートブックに応じてショートカットキーの動作を変えたいという事ですね。
これを実現するためには、init.jsでカスタムのスクリプトを記述する必要があります。以下のマニュアルをご参照ください:

カスタムのコマンドを定義し、それを任意のキーに割り当てます。
そのコマンド内で、アクティブのノートブックを判定し、テンプレートのコマンドを呼び出します。
カスタムのコマンドの定義方法の例はこちら:

カスタムのコマンドはおおむね以下のようなコードになるでしょう:

inkdrop.commands.add(document.body, "custom:new-note-from-template", async () => {
  const { queryContext } = inkdrop.store.getState()
  if (queryContext.mode === "book") {
    switch(queryContext.bookId) {
      case "book:A":
        inkdrop.commands.dispatch(document.body, "inkdrop-note-templates:meeting-note")
        break
      case "book:B":
        inkdrop.commands.dispatch(document.body, "inkdrop-note-templates:dev-note")
        break
      default:
        inkdrop.commands.dispatch(document.body, "core:new-note")
    }
  } else {
    inkdrop.commands.dispatch(document.body, "core:new-note")
  }
})

ノートブックの一覧データは以下で取得できます。Developer Toolsなどで確認してください:

inkdrop.store.getState().books.all

リファレンス:

1 Like

ありがとうございます。
まさしくこれです。