首先,我承认我是Emacs和ELisp的完全新手(就此而言,一般来说是Lisp),而我偶然发现了一个错误,该错误使我在尝试写作时困扰了很长时间。我的.emacs文件。
这是重现该问题所需的最小代码示例(即,具有仅包含以下内容的.emacs):
(defun define-esc-key (keybind)
(define-key key-translation-map (kbd keybind) 'my-esc))
(define-esc-key "M-j")
这将对Emacs23产生以下错误:
Lisp error: (wrong-type-argument integer-or-marker-p keybind)
read-kbd-macro(keybind)
#[(keys) "\301!\207" [keys read-kbd-macro] 2 2186954](keybind)
(kbd keybind)
(define-key key-translation-map (kbd keybind) (quote my-esc))
define-esc-key("M-j")
但是可以像我期望的那样在Emacs24中工作。
如果我用
keybind
替换define-esc-key
函数主体中的"M-j"
实例,它也可以在Emacs23中使用。(顺便说一句,对不起,标题不好,但我想不出更多描述性的东西。)
最佳答案
从NEWS
文件:
* Lisp Changes in Emacs 24.3
...
*** `kbd' is now a function rather than a macro.
这意味着在早期的Emacs版本中,
kbd
的参数必须确实存在于调用中,而不是在示例中使用变量。另外,您可以使用
eval
和反引号插入值:(eval `(kbd ,keybind))
关于emacs - Emacs : wrong-type-argument error in Emacs23 but not in Emacs24,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21237159/