我编写了一个函数init-set-key-mappings,它设置.emacs文件中的所有全局键.
(defun init-set-key-mappings ()
"All the key mappings go here"
(let ((mappings (list
'("\C-ca" 'open-fileline))))
(mapcar (lambda (mapping)
(let ((key (car mapping))
(func (cadr mapping)))
(progn
(message (format "map key %s to %s" key func))
(global-set-key key func))))
mappings)))
Run Code Online (Sandbox Code Playgroud)
它评价很好,但是当我按下Cc a时,Emacs抱怨"错误的类型参数commandp,(引用open-fileline)"
我究竟做错了什么?
编辑:我找到了答案.在打开文件之前删除引用似乎可以解决问题.为什么它是问题的象征?这不是函数如何传递 - 作为符号?
你双重引用了这个功能open-fileline.在表达中
(list '("\C-ca" 'open-fileline)))
Run Code Online (Sandbox Code Playgroud)
第一个引号表示引用了以下列表中的所有内容.然后你添加了第二个引用open-fileline.这意味着列表实际上并不包含符号作为汽车的第二个元素,而是一个带引号的符号.相比:
(symbolp (cadar (list '("string" 'open-fileline))))
Run Code Online (Sandbox Code Playgroud)
和
(symbolp (cadar (list '("string" open-fileline))))
Run Code Online (Sandbox Code Playgroud)