使用标准钩子内的参数运行函数

时间:2018-12-12 00:31:18

标签: emacs hook

运行带有参数的函数的最佳方法是什么,例如。通常可以在普通钩子中与run-hook-with-args一起运行的一个钩子,例如。 after-save-hook

作为一个简单的示例,我想在此处将some-function添加到after-save-hook,但允许它有一个附加参数。

(defun some-function (&optional arg)
  (if arg 'do-this 'otherwise-do-this))

;; how to run `some-function' with argument here?
(add-hook 'after-save-hook 'some-function nil 'local)

1 个答案:

答案 0 :(得分:2)

因此,您已经得到了类似的信息(我更改了函数名称,以减少混乱)。

(add-hook 'after-save-hook 'my-function nil 'local)

但是您要问的是,after-save-hook调用my-function时如何安排它传递一个参数。

首先,由于after-save-hook是一个普通的钩子,因此无法直接进行操作,因此无法以任何方式传递参数来运行它。

这意味着您必须向钩子添加一个功能,该功能实际上可以执行您想要的操作。

可以创建一个函数来实现您想要的功能:

(add-hook 'after-save-hook (apply-partially 'my-function ARG) nil 'local)

但是,在以后检查和操纵钩子时,遵循这些思路的方法确实很混乱,因此,我建议不要做这样的事情。

老实说,最干净的方法是非常简单地定义一个可以执行所需功能的命名函数,并将 that 添加到挂钩中。

(defun my-function-do-this ()
  "Do This"
  'do-this)

(add-hook 'after-save-hook 'my-function-do-this nil 'local)