如何在主要模式发生变化之前运行函数

law*_*ist 4 emacs elisp

change-major-mode-hook似乎运行已经启用了新的主要模式。如何主模式发生变化之前运行一个函数?

示例:major-mode-abc具有minor-mode-xyz活动的缓冲区,并且该次要模式负责放置某些叠加层。更改为 时major-mode-defremove-overlays如果minor-mode-xyz在更改主要模式之前处于活动状态,则必须执行该功能。newmajor-mode-def也会minor-mode-xyz再次激活并立即绘制新的叠加层(这是一件好事);然而,那些新的覆盖(我想保留的)会被'change-major-mode-hook 'remove-overlays nil t. 我宁愿该remove-overlays函数与关联的挂钩一起运行minor-mode-xyz,而不是作为启用major-mode-def.

Ste*_*fan 5

您说“更改主要模式挂钩似乎在...之后运行”:我想知道是什么让您这么认为,因为它是在之前运行的,即它完全按照您的要求执行(并且正好用于这种情况)。