为什么执行 org-agenda 会打开不属于 agenda file 的多余文件

一般而言,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 变量

一般来说,这种不存在的文件有两种情况:

  1. 文件X以前位于A路径,后来移动到B路径,结果仍会打开A路径的文件
  2. 文件X在设备1的路径为A,在设备2的路径为B,结果在设备2执行也会打开路径A的文件

但是也不是所有agenda files会有这个问题……希望能得到大家的帮助,定位到更具体的原因。

感觉配置不太对劲

emacs -Q 检查一下

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啊