0

我以“#title”开头,将我的缪斯模式文件(通常以 .txt 后缀命名)表示为缪斯模式。为此,我有

    

    ;; *.txt 文件上的缪斯模式,如果是#title 或 sect。标题在前 4 行
    (add-hook '文本模式挂钩
              (拉姆达()
                (除非 (或 (eq major-mode 'muse-mode)
                (不是 (stringp buffer-file-truename)))
                  (当(等于(文件名扩展缓冲区-文件-真名)“txt”)
                    (保存游览
                      (转到第 5 行)
                      (if (re-search-backward "\* [AZ][az]+.*\\|#title " 1 t)
                          (缪斯模式)))))))

如果我也有

    (添加到列表 'auto-mode-alist '("\\.txt$" . visual-line-mode))

在 .emacs 中(按照上面的代码),然后 muse-mode 不再起作用。虽然如果我在 muse 文件上的 emacs 中使用 Meta-x 调用视觉线模式,它不会把事情搞砸。

理想情况下,我希望对所有 .txt 文件都使用视觉线模式,但又不会弄乱缪斯。否则,我想以可视行模式启动所有 .txt 文件,除非它们是 muse 文件。

4

2 回答 2

3

变量'auto-mode-alist选择主要模式。

visual-line-mode是一种次要模式,通过将其添加到'auto-mode-alist您可以使其表现得像一个主要模式,它取代了text-mode您开始使用的。

相反,添加turn-on-visual-line-mode-in-txt类似text-mode-hook这样:

(add-hook `text-mode-hook 'turn-on-visual-line-mode)

(defun turn-on-visual-line-mode-in-txt ()
  (when (and (buffer-file-name)
             (string-match ".txt$" (buffer-file-name)))
    (turn-on-visual-line-mode)))

有关差异的更多信息,请阅读主要次要模式的手册。

于 2013-01-28T15:16:14.357 回答
2

我认为@treyJackson 发现了问题,但这里有一些额外的评论:

顺便说一句,您使用 atext-mode-hook切换到muse-mode会在各种情况下行为不端(因为您首先切换到文本模式,然后在中途激活 muse 模式,之后文本模式激活结束(通常,剩下的不多了)做,但在 text-mode-hook 上可能有更多功能要运行)仍将执行)。一种更强大的方法可能是:

(add-to-list 'auto-mode-alist '("\\.txt\\'" . text-or-muse-mode))

(defun text-or-muse-mode ()
  (if (save-excursion
        (goto-line 5)
        (re-search-backward "\\* [A-Z][a-z]+.*\\|#title " 1 t))
      (muse-mode)
    (text-mode)))

当然,您也可以-*- muse -*-在第一行使用 a ,或者改为依靠magic-mode-alist

于 2013-01-28T15:44:24.567 回答