gpt4 book ai didi

Emacs:在函数内使用 add-hook (defun)

转载 作者:行者123 更新时间:2023-12-01 19:11:23 24 4
gpt4 key购买 nike

如果我这样做

(add-hook 'haskell-mode-hook
(lambda ()
(setq indent-tabs-mode t)
(setq tab-width 4)
(message "OK")))

在我的~/.emacs.d/init.el中,当我进入haskell模式时,(lambda ...)会被执行.

但是,如果我使用这样的函数:

(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);我想通过使用thin来减少代码的冗长像上面的 my-add-hook 一样的包装器,但我不知道为什么 add-hook 如此困难。

EDIT1:添加了澄清代码。

EDIT2:当我尝试使用 my-add-hook 时,我确实收到“文件模式规范错误:(void-variable tmode)”消息。

最佳答案

这是一个简单的修复,无需了解词法绑定(bind):

(defun my-add-hook (hook tmode twidth)
(add-hook hook
`(lambda ()
(setq indent-tabs-mode ,tmode)
(setq tab-width ,twidth)
(message "OK"))))

关于Emacs:在函数内使用 add-hook (defun),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com