私は+をCモード(実際には組み込みCCモード)の組み込みの「コンパイル」機能にマッピングするemacs
ために(Arch Linuxの23.3)取得しようとしています。これまで私は次のことを試しました。CtrlF12
(defun my-c-mode-common-hook (define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
そして:
(eval-after-load 'c-mode
'(define-key c-mode-map (kbd "C-<f12>") 'compile))
しかし、どちらも機能しません<C-f12> is undefined
。私が読んだ内容に基づいてここ、こことここ、なぜ動作しないのか理解できません。どんなアイデアがありますか?
答え1
Cモード(特に変数c-mode-map
)はcc-mode
。c-mode
(eval-after-load 'cc-mode
'(define-key c-mode-map (kbd "C-<f12>") 'compile))
次のような他の方法の場合vschumが既に回答しています、パラメータリストがありませんdefun
。また、c-mode-common-hook
これは正しい位置ではありません。 Cモードに入るたびに実行されます。バインディングを追加する正しい時間は、Cモードがロードされたときです。eval-after-load
上記の一般的なメカニズムを介して、または次の方法でこれを実行できますc-initialization-hook
。
(defun my-c-mode-common-hook ()
(define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-initialization-hook 'my-c-mode-common-hook)
答え2
タイプミスがあります。 defunのパラメータ定義がありません。この場合、関数 my-c-mode-common-hook はパラメータを受け入れないため、関数名の後に空の括弧セットを追加します。
(defun my-c-mode-common-hook ()
(define-key c-mode-map (kbd "C-<f12>") 'compile))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)