如何为不同的主要模式使用相同的文件扩展名

时间:2014-10-09 00:55:39

标签: emacs elisp org-mode

我使用org-mode的自定义版本lawlist-org-mode - 每个函数和变量都有前缀lawlist-,修改后的版本有许多自定义功能,这些功能在库存版本中不可用。有时,我喜欢使用库存org-mode版本 - 但是,这需要手动修改auto-mode-alist然后重新启动Emacs。这是必要的,因为函数和变量org-agenda-files以及org-mode执行的检查以验证是否存在正确的主模式。是否有一种有效的方法可以根据被调用的函数以编程方式修改它?

股票org-mode需要此条目:

(add-to-list 'auto-mode-alist '("\\.todo\\'" . org-mode))

名为lawlist-org-mode的自定义版本需要此条目:

(add-to-list 'auto-mode-alist '("\\.todo\\'" . lawlist-org-mode))

实施例

  • 如果我致电M-x org-agenda,则.todo文件必须位于org-mode

  • 如果我致电M-x lawlist-org-agenda,则.todo文件必须位于lawlist-org-mode


一些想法org-agenda-files通常由org-agenda函数使用以下代码行访问 - (org-agenda-files nil 'ifmode) . . . (while (setq file (pop files))。也许修改函数org-agenda-files是一种选择吗?

1 个答案:

答案 0 :(得分:5)

FUNCTION条目的auto-mode-alist部分(即cdr)只是一个函数。原则上它被称为建立主要模式。但它可以做任何事情。

特别是,您可以有一个条目("\\.todo\\'" . foo),其中函数foo有条件地调用lawlist-org-modeorg-mode

例如,当月亮满时可以使用lawlist-org-mode,否则可以使用org-mode。或者它可以测试一个全局变量,当您想要从一个变量切换到另一个变量时,可以设置该变量。等等。

至少那是我对auto-mode-alist doc字符串的阅读。我从未尝试过。