Emacs:仅在init.el中为给定的主要模式加载包

时间:2015-01-29 17:08:37

标签: emacs elisp

前段时间我为一些具有我正在使用的特定格式的文件制作了一个.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)
  )

我遇到了麻烦,因为它影响了其他主要模式中注释函数(例如comment-dwim)的行为(特别是在python模式中:当我取消注释一个注释区域时,它会破坏我的缩进... )。如果我在epx.el中评论这些行,就不会有更多问题。

那么这些(defadvice ...)怎么才能在epx主模式下生效呢?

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以检查当前缓冲区的主要模式,只有当它是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