Emacs 将带有参数的函数添加到挂钩

Emacs 将带有参数的函数添加到挂钩,emacs,lisp,elisp,Emacs,Lisp,Elisp,当我使用以下命令打开源代码文件时,我想根据编程语言运行一个函数。我必须将特定于语言的str传递给foo函数。如何在addhook语句中执行此操作 (defun foo (str) (blahblah...)) (add-hook 'prog-mode-hook 'foo) 这是(首次在Google上点击“emacs添加钩子”): 坏消息是模式挂钩通常没有任何参数。好消息是,以下是手册中关于您的情况的部分: 大多数主要模式在初始化的最后一步运行一个或多个“模式挂钩” 因此,我没有亲自测试它

当我使用以下命令打开源代码文件时,我想根据编程语言运行一个函数。我必须将特定于语言的
str
传递给
foo
函数。如何在
addhook
语句中执行此操作

(defun foo (str)
   (blahblah...))
(add-hook 'prog-mode-hook 'foo)
这是(首次在Google上点击“emacs添加钩子”):


坏消息是模式挂钩通常没有任何参数。好消息是,以下是手册中关于您的情况的部分:

大多数主要模式在初始化的最后一步运行一个或多个“模式挂钩”


因此,我没有亲自测试它,但我非常确定您可以编写一个通用钩子,它将检查
主模式
变量,并执行特定于模式的操作。

使用内置的
部分应用

(add-hook 'prog-mode-hook (apply-partially #'foo "spam with eggs"))

如果要从钩子中删除函数,该怎么办?
(add-hook 'prog-mode-hook (apply-partially #'foo "spam with eggs"))