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