添加带参数的函数到钩子

时间:2013-05-24 02:53:47

标签: emacs lisp elisp

当我使用以下内容打开源代码文件时,我想根据编程语言运行一个函数。我必须将特定于语言的str传递给foo函数。怎么能在add-hook声明中做到?

(defun foo (str)
   (blahblah...))
(add-hook 'prog-mode-hook 'foo)

3 个答案:

答案 0 :(得分:7)

使用内置apply-partially

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

答案 1 :(得分:5)

这是described in the manual(Google首次点击“emacs add-hook”):

(add-hook 'prog-mode-hook (lambda () (foo "foobarbaz")))

答案 2 :(得分:0)

坏消息是模式挂钩通常没有任何参数。好消息是,这是(emacs) Hooks部分手册中有关您的情况的说法:

  

大多数主要模式都会运行一个或多个“模式挂钩”作为初始化的最后一步。

所以,我自己没有测试过,但我很确定你可以编写一个通用钩子来检查major-mode变量并改为执行模式特定的操作。