2

どのプログラム モードにも適合するように、改善のためにカスタム モードを定義したいと考えています。そして、このすべてのモードのキー バインディングを定義する必要があります。私は最小限の労力でキー バインディングを宣言するためdefine-minor-modeに withを使用することにしました。:keymap

kbd マクロは、このキー シーケンスのマジック ナンバーを与えてくれcomment-or-uncomment-regionました。"C-;"[67108923]

動作しないサンプルを書きました

(define-minor-mode
  my-mode
  nil nil
 :keymap '(
   ( [67108923] . comment-or-uncomment-region )
  )
)

モードを登録してオンに切り替えましたが、押すС-;とキーシーケンスが定義されていないという通知が表示されます

その後、私はスクラッチ バッファに書き込んで、global-set-key期待どおりに実行された単純なものを評価しました。

(global-set-key [67108923] 'comment-or-uncomment-region )

を押すC-;と、期待されるcomment-or-oncomment-region動作が生成されるようになりました。

経由で機能情報を検索して問題をデバッグしようとしましたC-h f。奇妙な出力を生成し、異なるキー シーケンスに2 回comment-or-oncomment-regionバインドされます。

It is bound to C - ;, C-;

最初の 1 つはマイナー モードのトグルで表示および非表示になり、もう 1 つはglobal-set-key呼び出しから表示されます。

両方のマップに同じキー定義を使用した場合、どうすればよいでしょうか? 私が見逃した詳細は何ですか?

4

2 に答える 2

3
  1. を使用して通常どおりキーマップを作成しmake-sparse-keymap、それに名前を付けるmy-mode-mapだけです --- これで完了です。:keymapへの引数は必要ありませんdefine-minor-mode

  2. make-sparse-keymapまたは、必要に応じて、作成したキーマップをの値として使用し:keymapます。(しかし、マイナーモードが期待するように名前が付けられているため、その必要はありません: my-mode-map.)

  3. しかし、グローバルバインディングを使用しないのはなぜglobal-set-keyですか? これをマイナーモードバインディングにする必要があるのはなぜですか?

于 2013-10-11T02:06:23.690 に答える