能否在交互式函数执行提示前加载依赖模式以访问其变量?
解决方案
问题的核心原因是:Emacs处理交互式函数时,会先执行interactive代码块,再执行函数体逻辑。你原来把(require 'org)写在函数体里,等它执行的时候,interactive已经在尝试访问未定义的org-agenda-files了,所以报错。
调整代码,把require放到interactive内部,确保加载Org包后再访问变量:
;;;###autoload (defun my/org-agenda-find-file (file-path) (interactive (progn ;; 在interactive阶段先加载Org包,确保变量可用 (require 'org) (list (completing-read "Choose agenda file: " org-agenda-files)))) (find-file file-path))
如果你的org-agenda-files是通过自定义配置延迟初始化的,还可以改用(org-agenda-files t)来强制获取最新的文件列表,替换上面的org-agenda-files:
(completing-read "Choose agenda file: " (org-agenda-files t))
这样即使Org包加载后变量还没完全初始化,也能正确获取到议程文件列表。
内容的提问来源于stack exchange,提问作者JJdasWIESEL
相关产品推荐
相关产品推荐

