我编写了一个函数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)))
评价很好,但是当我按下C-c a时,Emacs抱怨“错误的类型参数命令,(引用open-fileline)”
我做错了什么?
编辑:我找到了答案。在打开文件之前删除引用似乎可以解决问题。为什么 它是问题的象征吗?这不是函数传递的方式 - 作为符号吗?答案 0 :(得分:5)
您双重引用了函数open-fileline
。在表达式
(list '("\C-ca" 'open-fileline)))
第一个引号表示引用了以下列表中的所有。然后,您向open-fileline
添加了第二个引用。这意味着列表实际上并不包含符号作为汽车的第二个元素,而是引用的符号。比较:
(symbolp (cadar (list '("string" 'open-fileline))))
和
(symbolp (cadar (list '("string" open-fileline))))