首先,我要承认,我是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中的工作方式与我所期望的一样。如果我用Emacs23替换define-esc-key函数体中的keybind实例,那么它也可以在"M-j"中工作。
(顺便说一句,很抱歉出现了糟糕的标题,但我想不出更多描述性的东西了。)
发布于 2014-01-20 15:31:54
来自NEWS文件:
* Lisp Changes in Emacs 24.3
...
*** `kbd' is now a function rather than a macro.这意味着在早期的Emacs版本中,kbd的参数必须确实存在于调用中,而不是在示例中使用变量。
或者,您可以使用eval和反引号插入值:
(eval `(kbd ,keybind))https://stackoverflow.com/questions/21237159
复制相似问题