Как удалить ключ из раскладки вспомогательного режима в Emacs? - PullRequest
32 голосов
/ 29 сентября 2011

Я глобально назначил C-c/ для режима ace-jump-mode, но режим reftex (второстепенный режим для цитат, используемых с AucTeX) переопределяет эту клавишу некоторыми функциями, которые я никогда не использую.

Я пытался local-unset-key но он отменяет привязку ключей только к текущей карте major mode.

Как мне удалить C-c/ из reftex-mode-map без внесения изменений в reftex.el?

Ответы [ 3 ]

43 голосов
/ 29 сентября 2011

Вы можете изменить существующую карту ключей, используя 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)
7 голосов
/ 29 сентября 2011

Вы можете использовать следующую команду:

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

для отмены отображения этой функции из C-c / ... Но reftex-mode должен быть загружен, поэтому reftex-mode-map будет доступен для модификации

1 голос
/ 21 апреля 2015

Вот как я это делаю. Это может быть улучшено, хотя.

 (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")
..
..
...