我正在尝试仅使用 paredit 中的几个函数,而不加载所有键绑定。查看 paredit.el,我发现唯一的键盘映射是 paredit-mode-map,所以我尝试了这个。
(setq paredit-mode-map (make-sparse-keymap))
(define-key paredit-mode-map (kbd "<C-M-left>") 'paredit-backward)
它没有更改键绑定(与 Ch k 一起检查),但变量 paredit-mode-map 已更改。
我也试过
(eval-after-load "paredit"
'(progn
(setq paredit-mode-map (make-sparse-keymap))
(define-key paredit-mode-map (kbd "<C-M-left>") 'paredit-backward)))
然后打开和关闭paredit,结果相同。
以前,直接更改键盘映射一直对我有用。这里发生了什么?
编辑:
我通过这样做成功地更改了键盘映射:
; Remove old paredit bindings
(defun take-from-list (condp list)
"Returns elements in list satisfying condp"
(delq nil
(mapcar (lambda (x) (and (funcall condp x) x)) list)))
(setq minor-mode-map-alist
(take-from-list
(lambda (x) (not (eq (car x) 'paredit-mode)))
minor-mode-map-alist))
; Create new paredit-mode-map
(setq paredit-mode-map (make-sparse-keymap))
(define-key paredit-mode-map (kbd "<C-kp-enter>") 'paredit-backward)
; Add the new paredit-mode-map to minor-mode-map-alist
(setq minor-mode-map-alist (append
(list (append (list 'paredit-mode) paredit-mode-map))
minor-mode-map-alist))
所以看起来minor-mode-map-alist 是一个用于查找的变量。我确信有更优雅的方法来更改键绑定,但我想更多地了解键绑定在 emacs 中的工作方式。