一般而言,org-agenda因为调用 (org-agenda-prepare-buffers (org-agenda-files nil 'ifmode))
会打开所有org-agenda-files,令我困惑的是,我的emacs会打开一些不存在于org-agenda-files的文件,如图所示:
每次都会因为这个问题提示:
Use M-x make-directory RET RET to create the directory and its parents
已经核实,上述文件都不存在于 org-agenda-files
变量
一般来说,这种不存在的文件有两种情况:
- 文件X以前位于A路径,后来移动到B路径,结果仍会打开A路径的文件
- 文件X在设备1的路径为A,在设备2的路径为B,结果在设备2执行也会打开路径A的文件
但是也不是所有agenda files会有这个问题……希望能得到大家的帮助,定位到更具体的原因。
emacs -Q 运行的是plain emacs,完全没有个人配置。请问具体应该怎么检查?
agenda files是从路径遍历取得:
;; 添加 note-path 中的所有org文件
(setq org-agenda-files
(apply 'append
(mapcar
(lambda (directory)
(directory-files
directory t org-agenda-file-regexp))
(split-string note-path)
)))
;; 递归添加 note-path/data 中的所有org文件
(setq org-agenda-files
(append org-agenda-files
(apply 'append
(mapcar
(lambda (directory)
(directory-files-recursively
directory org-agenda-file-regexp))
(split-string (concat note-path "data/"))
))))
;; 添加 config 文件
(add-to-list 'org-agenda-files (concat emacs-config-path "config.org"))
路径是一个根据环境不同单独设置的变量:
(if *is-a-mac*
(progn
(setq note-path "/Users/yuchen/Notes/")
(setq emacs-config-path "~/.emacs.d/")
)
)
(if *win32*
(progn
(setq note-path "C:/Users/Yuchen/Documents/Notes/")
(setq emacs-config-path "C:/Users/Yuchen/.emacs.d/")
)
)
(if *termux*
(progn
(setq note-path "~/Notes/")
(setq emacs-config-path "~/.emacs.d/")))
问题主要是出在termux的emacs,可以看到org-agenda-files只有手机本地的路径:
但是执行agenda命令却会打开/Users/yuchen/Note/xxx:
不懂elisp…有没print下不同平台是不是真的判断对了,毕竟不是if else啊