如何找到在 emacs 中定义键绑定的位置?

how to find where a key binding is defined in emacs?

shift + m 以某种方式绑定到 emacs 中的 Meta 键。现在我无法输入任何以 M 开头的单词,例如 Mock。我想找出发生这种情况的原因或导致这种情况的软件包。

关于这个问题有 one question 但没有解决这个问题。

我试过 C h k m 结果显示 m runs command self-insert-command

但是当我尝试 C h k M 时,它正在激活 Meta 键并正在等待另一个键的输入。

C h c M也是如此。

有什么方法可以找出造成这种情况的原因吗?

更新:

  1. 我的 emacs 配置 https://github.com/ChillarAnand/.emacs.d

  2. 问题未出现在 OS 级别。如果我用 emacs -Q 启动 emacs,一切正常。

问题是 code

(define-key smartparens-mode-map (kbd "M up") nil)
(define-key smartparens-mode-map (kbd "M down") nil)))

这不会将 shift m 绑定为 Meta,而是将键序列 M u pM d o w n 绑定到 nil。要在 kbd 中指定 Meta 使用 M-{the key},要指定 up 使用 <up>,对于中的代码问题:

(define-key smartparens-mode-map (kbd "M-<up>") nil)
(define-key smartparens-mode-map (kbd "M-<down>") nil)))

在我的 .emacs 开头添加这个对我有用:

(let ((old-func (symbol-function 'define-key))
      (bindings-buffer (get-buffer-create "*Bindings*")))
  (defun define-key (keymap key def)
    (with-current-buffer bindings-buffer
      (insert (format "%s -> %s\n" key def))
      (mapbacktrace (lambda (evald func args flags)
                      (insert (format "* %s\n" (cons func args))))))
    (funcall old-func keymap key def)))