【问题标题】:Emacs: load package only for given major mode in init.elEmacs:仅在 init.el 中为给定的主要模式加载包
【发布时间】:2015-01-29 17:08:36
【问题描述】:

前段时间,我为一些我正在使用的特定格式的文件制作了一个 .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主模式下有效呢?

谢谢!

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

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

    【讨论】:

    • (buffer-local-value 'major-mode (current-buffer)) 是写major-mode 的一种迂回方式。而且通常要测试主要模式,我推荐derived-mode-p
    • 谢谢,我已经修改了答案以使用您的建议。
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多