Emacsメジャーモードのキーマップ定義が失敗する

Emacsメジャーモードのキーマップ定義が失敗する

そこで、シンプルなメジャーモード(レポートモード)を書いてみました。使用して例として。キーマップが実際にはマッピングされていないことを除いて、すべて動作しているようです。

そうするとC-h f report-mode、追加したキーマップのリストが正しく表示されます。

ESC  n    kill-dupe

ただし、USE Mn または ESC n を実行しても何も起こりません。 を介して関数を手動で呼び出すことができるM-x kill-dupeので、それが問題ではないようです。

残念ながら、マシンが別のネットワーク上にあるため、実際の elisp コードをコピーして貼り付けることはできません。

私が使用した例をそのままコピーして(置き換えて)みます。

(defvar report-mode-map
  (let ((map (make-sparse-keymap "Report-Mode")))
    (define-key map "\M-n" 'kill-dupe)
    map)
 "Keymap for browsing report mode")

それはここ

keymapreport-mode-map を調べてみると、 withinという追加のキーワードがあることを除けば、ほぼ正しいように見えます。

(keymap (27 keymap (110 . kill-dupe)) keymap (....) "Report-Map" (....))

これを、たとえば text-mode-map と比較すると、sparse-key-map 定義文字列が埋め込まれており、追加の「keymap」文字列があります。eval すると(keymapp report-mode-map)true の結果が得られるので、異なる形式は問題ではないことを示しているようです...

最後に、他のキーマップ バインディングもどれも機能しないので、これは確かに問題であると確信しています。

どのようなアイデアでも結構です。コードを直接貼り付けることができず、再度申し訳ありません。

答え1

それで、私は答えを見つけました。

結局、カスタム キー マップをdefine-derived-mode呼び出したことがありませんでした。use-local-map

以下を含めたら:

(use-local-map report-mode-map)

すべて正常に動作しました。

関連情報