在Emacs Lisp宏中生成带引号的符号

时间:2014-04-23 07:31:30

标签: emacs elisp

我正在创建一个简单的宏来禁用某些主要模式下的show trailing whitespace(我稍后会在dolist循环中循环这个宏):

(defmacro non-trailing-whitespaces-modes (mode)
  (let ((hook (intern (concat  mode "-mode-hook"))))
    `(add-hook ,hook (lambda () (setq show-trailing-whitespace nil)))))

在此宏展开后:(macroexpand '(non-trailing-whitespaces-modes "eshell")),结果为

(add-hook eshell-mode-hook
          (lambda nil
            (setq show-trailing-whitespace nil)))

我希望eshell-mode-hook'eshell-mode-hook,否则会导致错误。

2 个答案:

答案 0 :(得分:2)

只需更改宏的正文即可开始(add-hook ',hook ...)

答案 1 :(得分:2)

不需要宏,这里:

(defun non-trailing-whitespaces-modes (mode)
  (let ((hook (intern (concat  mode "-mode-hook"))))
    (add-hook hook (lambda () (setq show-trailing-whitespace nil)))))