Emacs:仅在 init.el 中为给定的主要模式加载包
Emacs: load package only for given major mode in init.el
前段时间我为一些我正在使用的特定格式的文件制作了一个 .el 文件 (epx.el)。我通过 (require '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)
)
我遇到了麻烦,因为它会影响其他主要模式(特别是 python 模式下的注释功能(例如 comment-dwim
)的行为:当我取消注释注释区域时,它打破我的缩进......)。如果我在 epx.el 中注释这些行,就没有更多问题了。
那么这些(defadvice ...)
怎么可能只在epx主模式下有效呢?
谢谢!
可以查看当前buffer的主模式,只有exp-mode
:
才采取行动
(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
。
前段时间我为一些我正在使用的特定格式的文件制作了一个 .el 文件 (epx.el)。我通过 (require 'epx)
.
问题是在这个epx.el中,有:
(defadvice comment-region (after indent-after activate)
(indent-region beg end)
)
(defadvice uncomment-region (after indent-after activate)
(indent-region beg end)
)
我遇到了麻烦,因为它会影响其他主要模式(特别是 python 模式下的注释功能(例如 comment-dwim
)的行为:当我取消注释注释区域时,它打破我的缩进......)。如果我在 epx.el 中注释这些行,就没有更多问题了。
那么这些(defadvice ...)
怎么可能只在epx主模式下有效呢?
谢谢!
可以查看当前buffer的主模式,只有exp-mode
:
(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
。