我使用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
是一种选择吗?
答案 0 :(得分:5)
FUNCTION
条目的auto-mode-alist
部分(即cdr)只是一个函数。原则上它被称为建立主要模式。但它可以做任何事情。
特别是,您可以有一个条目("\\.todo\\'" . foo)
,其中函数foo
有条件地调用lawlist-org-mode
或org-mode
。
例如,当月亮满时可以使用lawlist-org-mode
,否则可以使用org-mode
。或者它可以测试一个全局变量,当您想要从一个变量切换到另一个变量时,可以设置该变量。等等。
至少那是我对auto-mode-alist
doc字符串的阅读。我从未尝试过。