emacs パッケージが提供するバインディングをクリアまたは編集するにはどうすればよいですか?
たとえば、単語を大文字にするためのキーバインド Mc がありました。
サードパーティの emacs パッケージをインストールすると、calc-dispatch に変更されます。
以前と同じように Mc を大文字で使用し、calc-dispatch を別のものに設定したいと思います。
一般的にこれを行うにはどうすればよいですか?
emacs パッケージが提供するバインディングをクリアまたは編集するにはどうすればよいですか?
たとえば、単語を大文字にするためのキーバインド Mc がありました。
サードパーティの emacs パッケージをインストールすると、calc-dispatch に変更されます。
以前と同じように Mc を大文字で使用し、calc-dispatch を別のものに設定したいと思います。
一般的にこれを行うにはどうすればよいですか?
キーバインド マップは順番にロードされます。後でロードされたキーバインド マップが優先されます。これが、グローバル キー マップがローカル キー マップ (モード キー マップ) の前に読み込まれるため、ローカル キー マップがグローバル キーマップをオーバーライドする理由です。 ここは何かがおかしい。philsのコメントを見てください。
私がこの問題を解決するのは、その指定モードにフックを追加して、そのキーバインドを無効にし、そのキーマップの他のキーに再バインドすることです。
まずM-c、 へのバインドを定義するキーマップ名を見つける必要がありますcalc-dispatch
。通常は と の組み合わせmode name
ですmode-map
。
たとえば、python モード キー マップの名前はpy-mode-map
.
次にM-c、そのモードでバインドを削除し、フックを使用して他のキーに再バインドします。
たとえば、python モードで、バインドC-j( py-newline-and-indent
) を削除します。に再バインドしC-iます。グローバルにバインドするC-jためlinum-ace-jump
です。これはあなたの場合と同様のケースです。
(add-hook 'python-mode-hook
#'(lambda ()
(define-key py-mode-map "\C-j" nil)
(define-key py-mode-map "\C-i" 'py-newline-and-indent)))
あなたが求めるものは:
(global-set-key (kbd "M-c") 'capitalize-word)
これは一般に、単語をグローバルに設定する方法です。
たぶん、2つを置き換えたい場合は、これを試すことができます:
(substitute-key-definition
'capitalize-word 'calc-dispatch (current-global-map))
(define-key KEYMAPNAME (kbd "KEYCOMBO") 'FUNCNAME)
特定のモード用です。例: (define-key emacs-lisp-mode (kbd "Mc) 'capitalize-word)。
(global-set-key (kbd "M-c") nil)
一般的にキーをバインド解除することです (グローバルに)。
これについては、グーグルで検索するだけで簡単に見つけることができます。