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

 骄傲_yi2006 发布于 2022-12-15 03:06

如果我做

(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.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有