私は確かに保持したいメジャーモードのキーをリバインドするマイナーモードを使いたいです。マイナーモードマップからグローバルに削除せずにキーを再バインドするにはどうすればよいですか?私はそのためにdefine-key
を使用することができますが、私は他のバッファ/メジャーモードのバインディングを維持したいと思います。Emacsのバッファローカルにマイナーモードのキーバインディングをオーバーライド
誰でも手助けできますか?
私は確かに保持したいメジャーモードのキーをリバインドするマイナーモードを使いたいです。マイナーモードマップからグローバルに削除せずにキーを再バインドするにはどうすればよいですか?私はそのためにdefine-key
を使用することができますが、私は他のバッファ/メジャーモードのバインディングを維持したいと思います。Emacsのバッファローカルにマイナーモードのキーバインディングをオーバーライド
誰でも手助けできますか?
これは少し面倒です。
(add-hook '<major-mode>-hook
(lambda()
(let ((oldmap (cdr (assoc '<minor-mode> minor-mode-map-alist)))
(newmap (make-sparse-keymap)))
(set-keymap-parent newmap oldmap)
(define-key newmap [<thekeyIwanttohide>] nil)
(make-local-variable 'minor-mode-overriding-map-alist)
(push `(<minor-mode> . ,newmap) minor-mode-overriding-map-alist))))
以下は、すべての面倒なビットを処理する関数です。
(defun local-set-minor-mode-key (mode key def)
"Overrides a minor mode keybinding for the local
buffer, by creating or altering keymaps stored in buffer-local
`minor-mode-overriding-map-alist'."
(let* ((oldmap (cdr (assoc mode minor-mode-map-alist)))
(newmap (or (cdr (assoc mode minor-mode-overriding-map-alist))
(let ((map (make-sparse-keymap)))
(set-keymap-parent map oldmap)
(push `(,mode . ,map) minor-mode-overriding-map-alist)
map))))
(define-key newmap key def)))
その後、あなたが私の場合は
(local-set-minor-mode-key '<minor-mode> (kbd "key-to-hide") nil)
ありがとう、期待どおりに動作します! – sebhofer
を行うことができ、当社の補完メニューが表示されたとき、company-mode
はM-p
とM-n
ためcider-repl-mode
バインディングをオーバーライドしました。補完メニューのキーマップはcompany-active-map
ですが、それに対応するマイナーモードはありません(company-mode
はメニューがではなくではありません)、既存の回答は使用できませんでした。
(add-hook 'cider-repl-mode-hook
(lambda()
(make-local-variable 'company-active-map)
(setq company-active-map (copy-tree company-active-map))
(define-key company-active-map (kbd "M-p") nil)
(define-key company-active-map (kbd "M-n") nil)))
グレート、その作業:ここ
は、私が代わりに思い付いたのです!私はこの一見単純な作業が非常に面倒であることに驚いています... – sebhofer
sebhofer:モード固有のキーマップの全体の意図は、モードがアクティブなどこでも有効になるということです。その行動を「一見一見単純」にすることを回避する。こうした状況を考えると、このソリューションはかなりエレガントに見えます。 – phils
@phils少し面白いですが、タスクは次のとおりです。指定されたバッファーのキーバインドを上書きします。私にとってはシンプルだと思う。 – sebhofer