Emacs:仅为init.el中的给定主模式加载包
不久前,我为一些使用特定格式的文件创建了一个.el文件(epx.el)。我通过Emacs:仅为init.el中的给定主模式加载包,emacs,elisp,Emacs,Elisp,不久前,我为一些使用特定格式的文件创建了一个.el文件(epx.el)。我通过(需要'epx)在init.el中加载它 问题在于,在这个epx.el中,有: (defadvice comment-region (after indent-after activate) (indent-region beg end) ) (defadvice uncomment-region (after indent-after activate) (indent-region beg end)
(需要'epx)
在init.el中加载它
问题在于,在这个epx.el中,有:
(defadvice comment-region (after indent-after activate)
(indent-region beg end)
)
(defadvice uncomment-region (after indent-after activate)
(indent-region beg end)
)
我遇到了麻烦,因为它会影响其他主要模式下注释函数(例如comment dwim
)的行为(特别是在python模式下:当我取消注释注释区域时,它会破坏缩进…)。如果我在epx.el中对这些行进行注释,就不会再有问题了
那么,这些(defadvice…
如何仅在epx主模式下有效
谢谢 您可以检查当前缓冲区的主模式,并且仅当它是
exp模式时才采取操作:
(defadvice comment-region (after indent-after activate)
(if (derived-mode-p 'exp-mode)
(indent-region beg end))
)
(defadvice uncomment-region (after indent-after activate)
(if (derived-mode-p 'exp-mode)
(indent-region beg end))
)
编辑:按照@Stefan的建议使用derived-mode-p
。(buffer local value'主模式(当前缓冲区))
是编写主模式的一种迂回方式。通常为了测试主模式,我推荐derived-mode-p
。谢谢,我修改了答案以使用您的建议。