如果我做
(add-hook 'haskell-mode-hook (lambda () (setq indent-tabs-mode t) (setq tab-width 4) (message "OK")))
在我~/.emacs.d/init.el
,然后(lambda ...)
当我进入时,它会被执行haskell-mode
.
但是,如果我使用这样的函数:
(defun my-add-hook (hook tmode twidth) (add-hook hook (lambda () (setq indent-tabs-mode tmode) (setq tab-width twidth) (message "OK"))))
然后~/.emacs.d/init.el
像这样调用它:
(my-add-hook 'haskell-mode-hook t 4)
然后没有任何反应(甚至没有显示"OK"消息).是add-hook
一个无法在内部使用的特殊功能defun
?我在单独的初始化文件中定义了每个项目设置,该文件检测缓冲区名称并将(lambda ()...)
调用添加到相关的主要模式(在上面的示例中haskell-mode
); 我想通过使用my-add-hook
如上所述的薄包装来减少代码冗长,但我不知道为什么add-hook
这么难.
EDIT1:添加了澄清代码.
EDIT2:我尝试使用时收到"文件模式规范错误:( void-variable tmode)"消息my-add-hook
.