各位,我现在使用 org mode 作为笔记工具,我的笔记保存在一个 github repo 中,会在不同的电脑上使用。我希望能将这个 repo 所有的 org file 自动加入 agenda 中。
0. org mode 的 repo 可能会 clone 到不同的文件夹中;
- 我的 emacs 配置也是在一个 github repo 中,希望所有的配置保持一致;
我现在的思路是通过配置 .dir-locals.el
来实现。
(("." . ((org-agenda-files . '("~/repos/passenger")))))
但是这行配置没有生效,~/repos/passenger 下的 org file 并没有加到 agenda 中。请问这是什么原因?有什么方案可以解决我的需求?
Youmu
2
.dir-locals.el
文件是当这个目录下的文件被访问时才会被执行的,你的需求更适合的可能是写在 custom.el 文件里。
custom.el 在不同的电脑上使用不同的配置。
我的目录结构如下:
$ tree -L 1 -a
.
├── .dir-locals.el
├── .git
├── .gitignore
├── README.md
└── notes
其中 notes
包含了所有的 org file。访问 notes/xxx/yyy.org
不会执行 .dir-locals.el
?
PS: custom.el 的方案我会去尝试,谢谢指教。
我现在用的方法是在org文件中加个tag,有这个tag的文件自动加入到org-agenda中。你看看你能用不?论坛中搜dynamic agenda,有个人写了个配置,或者google搜也有个。 手机回,不方便找,你自己搜下。要是符合你的要求,明天给你找下链接。
Youmu
5
这个是会执行的。
但是 .dir-locals.el
里的设置是仅对当前目录生效的,也就是在访问这个目录或子目录下的文件时,针对此文件的 buffer 生效的。
可以理解为
(setq-local org-agenda-files '("~/repo/passenger"))
你可以用 C-h v 查看、对比一下在访问 yyy.org 时的 org-agenda-files
的值和在 *scratch*
buffer 时是否一样。
因为 M-x org-agenda
时读取的 org-agenda-files
是全局的那个,而非 yyy.org 里的 org-agenda-files
, 所以就无法生效。
如果一定要使用 .dir-locals.el
的方式来实现的话,相当于在 .dir-locals.el
里要放一个
(setq org-agenda-files '("~/repo/passenger"))
当然这种格式是不合法的, .dir-locals.el
在加载时会报错。
有点奇怪,它在访问 yyy.org 和在 *scratch*
下都是 nil
。
Btw, 我的 .dir-locals.el
是 add-dir-local-variable
生成的,格式是正确的。
试一下这个格式
((nil . ((org-agenda-files . '("~/repos/passenger")))))
这个方案也行不通:当它访问目录的文件时, org-agenda-files
的值是我设置的值。但是在 agenda
buffer 里面,这个值是空的。
这个是肯定的,.dir-locals.el 就是这个功能。
其实你完全可以把笔记保存在一个相对 .emacs.d
的目录,然后在 emacs 里操作,比如:
(defvar my-notes-dir (expand-file-name "notes" user-emacs-directory))
(defun my/clone-notes()
(interactive)
(magit-clone-internal "repo url" my-notes-dir ))
1 个赞
其实 集成org-roam和任务管理 这个方案也听到的(记得把里面的 union
改成 cl-union
的),但是一个 thread 只能设置一个解决方案。