如何从Emacs中的次模式键映射中删除键?

时间:2011-09-29 13:58:45

标签: emacs keyboard-shortcuts elisp

我已全局将C-c/分配给ace-jump-mode但reftex-mode(AucTeX使用的引用的次要模式)会使用我从未使用的某个函数覆盖此键。

我尝试了local-unset-key,但它只解除了当前主要模式地图中的键。

如何在不更改reftex.el的情况下从C-c/删除reftex-mode-map

3 个答案:

答案 0 :(得分:42)

您可以使用define-key更改现有的键映射。通过传递nil作为要调用的函数,密钥将变为未绑定。我想你应该可以做类似的事情:

(define-key reftex-mode-map "\C-c/" nil)

当然,你应该在某种钩子中做到这一点,例如:

(defun my-reftex-hook ()
  (define-key reftex-mode-map "\C-c/" nil))
(add-hook 'reftex-mode-hook 'my-reftex-hook)

答案 1 :(得分:7)

您可以使用以下命令:

(define-key reftex-mode-map "\C-c/" nil)

C-c /取消映射此功能...但应加载reftex-mode,因此reftex-mode-map可用于修改

答案 2 :(得分:1)

我就是这样做的。不过,它可以改进。

 (defun get-key-combo (key)
  "Just return the key combo entered by the user"
  (interactive "kKey combo: ")
  key)

(defun keymap-unset-key (key keymap)
    "Remove binding of KEY in a keymap
    KEY is a string or vector representing a sequence of keystrokes."
    (interactive
     (list (call-interactively #'get-key-combo)
           (completing-read "Which map: " minor-mode-map-alist nil t)))
    (let ((map (rest (assoc (intern keymap) minor-mode-map-alist))))
      (when map
        (define-key map key nil)
        (message  "%s unbound for %s" key keymap))))
;;
;; Then use it interativly
;; Or like this:

(keymap-unset-key  '[C-M-left]   "paredit-mode")
..
..