emacs:在特定主要模式下打开特定目录中的所有.txt文件

时间:2012-02-25 07:39:41

标签: emacs org-mode

编辑:事实证明,我的.emacs文件的第二次编辑确实有效。 (参见本条目下面的评论。)

我尝试了几个.emacs的附加内容,以便在emacs中使用orgmode打开所有txt文件。他们没有工作。我怎样才能实现呢?

;;SET EMACS AS DEFAULT MAJOR MODE TO FOR ALL FILES WITH AN UNSPECIFIED MODE
(setq default-major-mode 'org-mode)

;;OPEN ALL TXT FILES IN ORGMODE
(add-to-list 'auto-mode-alist '("\\.txt$" . org-mode))

此外:

在某个目录orgmode中只打开txt文件会更好。任何暗示如何做到这一点也将不胜感激。

4 个答案:

答案 0 :(得分:4)

另一种方法是使用目录本地变量。这很好,因为您可以将文件放在您希望此行为参与的任何目录中,并且它可以在任何子目录中递归工作。

在所需目录中创建名为.dir-locals.el的文件。

以下是内容:

((nil (eval . (if (string-match ".txt$" (buffer-file-name))(org-mode)))))

如下所示:对于任何主要模式(nil),eval,请使用以下格式:

(if ....  (org-mode))

答案 1 :(得分:3)

auto-mode-alist中的正则表达式可能更复杂,例如"^/path/to/.*\\.txt$"

答案 2 :(得分:2)

您可以实现一个验证文件目录并修改缓冲模式的挂钩:

(add-hook 'find-file-hooks 
          (lambda ()
            (let ((file (buffer-file-name)))
              (when (and file (equal (file-name-directory file) "c:/temp/"))
                (org-mode)))))

作为替代方案,您可以在文本文件的开头中添加模式行。在这种情况下,emacs将设置指定的模式。

; -*- mode: org;-*-
* header 1
** header 2

答案 3 :(得分:0)

我把Oleg Pavliv的一些代码粘贴在这里,以及来自elisp - File extension hook in Emacs - Stack Overflow

的yibe的代码。
(defun use-org-mode-for-dot-txt-files-in-owncloud ()
  (when (and (string-match owncloud buffer-file-name)
             (string-match "\\.txt\\'" buffer-file-name))
    (org-mode)))
(add-hook 'find-file-hook 'use-org-mode-for-dot-txt-files-in-owncloud)

这样,尽管ownCloud Web和手机应用程序目前只对.txt个文件很友好,但是从我的PC上我可以使用Emacs'他们的组织模式。

(如果我将所有.txt个文件设置为使用组织模式,则会中断todotxt-mode。)

(注意owncloud是一个字符串变量,等于我的ownCloud路径。)