如何正确修改Emacs内置函数添加自定义钩子,避免重写全量代码
给Emacs内置函数追加后置执行逻辑的最优方案
你可以直接使用Emacs内置的**函数建议(advice)**机制实现需求,完全不需要重写整个原函数,和原有逻辑完全解耦,兼容后续Emacs版本对原函数的更新。
方案1:Emacs 24.4及以上版本推荐(当前主流版本均支持)
使用新版advice-add接口,给dired-find-file添加后置执行逻辑:
;; 单独定义advice函数,方便后续管理/移除 (defun my/trigger-dired-find-file-hook (&rest _) (run-hooks 'my/dired-find-file-hook)) ;; 给dired-find-file添加后置advice,原函数执行完成后自动运行上面的函数 (advice-add 'dired-find-file :after #'my/trigger-dired-find-file-hook)
如果后续需要移除该自定义逻辑,只需执行:
(advice-remove 'dired-find-file #'my/trigger-dired-find-file-hook)
方案2:兼容24.4之前的旧版Emacs
使用传统defadvice接口实现相同效果:
(defadvice dired-find-file (after run-my-custom-hook activate) (run-hooks 'my/dired-find-file-hook))
内容的提问来源于stack exchange,提问作者randouser
相关产品推荐
相关产品推荐

