Emacs:将writeroom模式设置为默认值

时间:2014-11-10 11:44:18

标签: emacs elisp emacs24

我是emacs的新手,我想知道我是否可以将writeroom-mode设置为始终打开。我想在启动emacs时打开它,并打开新的缓冲区或在它们之间切换。

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:1)

  • 如果write-room模式是全球化次要模式,则只需在初始化文件中将其打开。

  • 如果write-room模式是辅助模式且没有全局化版本,则可以使用define-globalized-minor-mode来定义此类全局模式。然后在init文件中打开它。

  • 如果write-room是主要模式,那么您可以自定义选项auto-mode-alist,以便为任意数量的文件扩展名启用它。

  • 如果write-room是普通功能(不是主模式功能),那么您可以使用add-hook自动将其打开,将其添加到您使用的主要模式中。

是的,如果你指定write-room是什么(用Lisp术语),那么回答你的问题会更容易。

答案 1 :(得分:1)

所以现在您已经提供了link(尽管在your other question中),我可以看到该库提供了一个全局次要模式,该模式仅针对特定的可配置集合开启主要模式。

以下内容将重新定义作出该决定的函数,以便writeroom-major-modesnil(空列表)时,它将为任何主要模式启用。

我还更改了现有测试以检查派生模式匹配,而不是简单地匹配。这样,'(text-mode)的默认值不仅会匹配text-mode,还会匹配从text-mode派生的每种模式。与您的问题并不严格相关,但如果您找到"所有模式"接近矫枉过正。

(eval-after-load 'writeroom-mode
  '(defun turn-on-writeroom-mode ()
     "Turn on `writeroom-mode'.
This function activates `writeroom-mode' in a buffer if that
buffer's major mode is a member of `writeroom-major-modes',
or derived from one of those modes.

If `writeroom-major-modes' is nil, activate `writeroom-mode'
in ALL buffers."
     (when (or (not writeroom-major-modes)
               (apply 'derived-mode-p writeroom-major-modes))
       (writeroom-mode 1))))

是否需要明确加载/要求库取决于您的安装方式;但是,当你已经使用图书馆时,可能已经开始使用图书馆了,这意味着它只是一个例子:

(global-writeroom-mode 1)

或者(对于上述所有内容),您可以忽略所提供的全局模式,并创建您自己的替代全局次要模式,如How to enable a non-global minor mode by default, on emacs startup?

中所述

编辑:我已经和writeroom-mode进行了一些比赛,看起来有很好的理由说明为什么它的全局模式有点保守。您仍然可以找到"派生模式"改进很有用,但我怀疑试图使这种特殊模式100%全局化并不是很有效。