我目前正在尝试建立一个C ++钩子,以设置用于编译不同项目的快捷方式,并且我有以下代码:
(defun configure-proj (proj key)
(add-hook 'c++-mode-hook
(function (lambda ()
(local-set-key (kbd (concatenate 'string key " u")) (lambda () (compile-unit-tests proj)))
(local-set-key (kbd (concatenate 'string key " d")) (lambda () (compile-debug proj)))
(local-set-key (kbd (concatenate 'string key " r")) (lambda () (compile-balanced proj)))
(local-set-key (kbd (concatenate 'string key " i")) (lambda () (compile-func-interactive proj "balanced" "11")))
(local-set-key (kbd (concatenate 'string key " c")) 'clean-all)))))
(configure-proj "Proj name" "<f4>")
该错误表明存在File mode specification error: (void-variable key)
。我知道我的代码中的错误是创建钩子时未复制configure-proj
的关键参数,但是我不知道如何解决它。有人可以帮忙吗?
编辑:忘记显示我如何运行configure-proj
。
答案 0 :(得分:2)
正如coredump解释的那样,问题在于您的配置文件未使用词法作用域。因此,在文件第一行的某处添加-*- lexical-binding:t -*-
。
答案 1 :(得分:1)
如果您不想为整个库启用词法绑定,则可以选择使用以下替代方法:
(defun configure-proj (proj key)
(add-hook 'c++-mode-hook
`(lambda ()
(local-set-key ,(kbd (concatenate 'string key " u")) (lambda () (interactive) (compile-unit-tests proj)))
(local-set-key ,(kbd (concatenate 'string key " d")) (lambda () (interactive) (compile-debug proj)))
(local-set-key ,(kbd (concatenate 'string key " r")) (lambda () (interactive) (compile-balanced proj)))
(local-set-key ,(kbd (concatenate 'string key " i")) (lambda () (interactive) (compile-func-interactive proj "balanced" "11")))
(local-set-key ,(kbd (concatenate 'string key " c")) 'clean-all))))