在前两天的学习中,我们掌握了 Hook 的挂载控制以及系统内置的各类生命周期 Hook。但是在实际编程中仅仅依靠系统自带的hook是远远不够的,例如我们开发mode或者功能可能要定义自己的hook,以便使用者能更灵活的控制。本篇我们来讨论如何亲手为自己编写的插件定义专属的自定义 Hook,并在合适的时机优雅地触发它们
背景知识
在之前介绍hook的时候我们说过,hook本质上一个存储了一个或者多个函数的变量,通过 run-hooks 将hook 变量作为参数就能调用其中存储的函数。而使用 add-hook和 remove-hook 本质上也是在操作这个存储了函数的列表。所以自定义hook就比较容易理解了。
我们只需要定义一个hook变量、然后在自己的代码中调用 run-hooks 或者 run-hook-with-args 这类函数即可。
但是我们要陈清一点,如果你在Emacs中查看系统hook变量发现,它们实际上是使用 defcustom 定义的,因此我们定义自己的hook最好也使用 defcustom 定义,并且type属性应该设置成 'hook。hook 本身就是供用户使用,需要用户额外进行配置的功能,所以选用 defcustom 更能体现这一点。
而运行hook,我们只需要在适当的时机调用 run-hooks 或者 run-hook-with-args 这类函数即可
总结
今天的内容比较简单也比较短小,本来一句话就能结束的。现在想想这些内容应该在前面介绍hook或者系统hook的之后顺便介绍一下的。但是那个时候我忘记提了。所以今天的内容就显得有点水分了。
最终我们来总结一下今天的内容:自定hook,需要使用 defcustom 定义hook变量,然后在我们的代码中调用 run-hook 或者 run-hook-with-args。外界使用hook的时候可以使用 add-hook 往变量中添加函数
评论 (0)