メジャーモードからバインディングを再バインドする方法

メジャーモードからバインディングを再バインドする方法

私はorg-modeを使用しており、デフォルトでC-c C-x C-zバインドされているのローカルバインディングをオーバーライドしたいと考えています。org-resolve-clocksマニュアル言う

ローカル キーマップで説明されているように、メジャー モードとマイナー モードはローカル キーマップを定義できます。... これらのキーマップの 1 つを変更する場合は、モード フックを使用する必要があります (フックを参照)。

だから私は次の行を持っています~/.emacs:

(global-set-key (kbd "C-c C-x C-SPC") 'my-function)

(global-set-key (kbd "C-c C-x C-z") 'my-function)

(add-hook 'org-mode-hook
      (lambda ()
        (local-set-key (kbd "C-c C-x C-z") 'my-function)))

最初の行は、バインドされていないキーを関数にバインドします。 2 行目は、org-mode ですでにバインドされているキーを関数にバインドします。 残りの行はフックを定義します。

Emacs を新たに起動し、キーを記述します。C-c C-x C-SPCは にバインドされmy-function、はorg バッファ内のC-c C-x C-zデフォルトにバインドされ、他の場所では にバインドされます。org バッファ内で次のようにバインディング コードを対話的に実行すると、org-resolve-clocksmy-functionM-:

(local-set-key (kbd "C-c C-x C-z") 'my-function)

キーはmy-functionデフォルトではなく にバインドされます。

私はまた別の答えを試しましたemacs でメジャーモード固有のキーバインディングを設定するスレッドそして失敗しました:

(with-eval-after-load 'org-mode
  '(define-key org-mode-map (kbd "C-c C-x C-SPC") 'my-function)
)

私はEmacs 25.3 (9.0)を実行しています。

メジャーモードでセット内のバインディングをオーバーライドするにはどうすればよいですか?

答え1

org-mode で関数をバインドするには、以下を使用しますdefine-key

(define-key org-mode-map (kbd "C-c C-x C-z") 'my-function)

これはグローバルバインディングをオーバーライドし、org-mode バッファ内でのみ機能します。

関連情報