Emacs 当前缓冲区的议程视图

Emacs 当前缓冲区的议程视图,emacs,elisp,org-mode,Emacs,Elisp,Org Mode,编辑:这个解决方案很简单,但对任何能解释我的方法为什么不起作用的人来说都是“加分” 原文: 我想要一个组织模式的自定义命令来显示一个议程,这只是从当前的缓冲区 下面的代码片段显示了我想要的视图类型 (setq org-agenda-custom-commands '(("b" "Buffer summary" ((todo "TODO" ((org-agenda-files '("~/.agenda/notes.org")))))))) 但是,我不想指定文件名,而是想使用

编辑:这个解决方案很简单,但对任何能解释我的方法为什么不起作用的人来说都是“加分”

原文: 我想要一个组织模式的自定义命令来显示一个议程,这只是从当前的缓冲区

下面的代码片段显示了我想要的视图类型

(setq org-agenda-custom-commands
      '(("b" "Buffer summary"
     ((todo "TODO" ((org-agenda-files '("~/.agenda/notes.org"))))))))
但是,我不想指定文件名,而是想使用当前缓冲区。这是我的尝试

(setq org-agenda-custom-commands
      '(("b" "Buffer summary"
     ((todo "TODO" ((org-agenda-files (buffer-file-name))))))))
当我打开一个组织缓冲区并运行这个议程命令时,结果就是一个几乎空白的议程视图。我猜想这是因为缓冲区文件名的计算时间晚于我按下议程视图时

我仍在开始学习elisp,所以请毫不犹豫地指出显而易见的问题。多谢各位

编辑:

遵循评论中的建议

(setq org-agenda-custom-commands
      '(("b" "Buffer summary"
     ((todo "TODO" ((org-agenda-files (list (buffer-file-name)))))))))
我收到回溯

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  file-directory-p(nil)
...etc...

对我来说,最明显的是不要创建一个额外的议程视图,而只是简单地调用该缓冲区上的任何现有视图(通过调用将视图限制为当前缓冲区,例如
C-ca
,其中
…议程视图通常显示从所有议程文件收集的信息,首先通过org命令
C-C[(org-agenda file to front)激活试图使议程可振动或可跟踪的文件

您可以通过以下方式测试当前buff名称:
(消息(缓冲区文件名))

通常,我使用各种文件的议程视图,但我可以跟踪不同的议程,例如完成、进度、修复、错误,只需使用热键即可 这是我的:


(setq)自定义命令
'(
(“x”议程)
(“y”议程*)
(“o”todo“ONPROGRESS”)
(“n”标记待办事项“+提示”)
(“待办事项”完成)
(“待办事项”待决)
(“b”todo“BUG”)
(“待处理事项”固定)
(“F”待办事项树“固定”)
))

因此,如果我想查看例如已完成的内容
C-C a d
,这将显示所有已完成的列表,无论它们来自哪个文件。

未测试猜测:尝试
(列表(缓冲区文件名))
,而不仅仅是
(缓冲区文件名)
,因为该值应该是一个列表。(它可以是一个文件名,但有不同的含义;请参阅
组织议程文件的docstring
)这如何回答我提出的问题?请重新阅读问题……你已经否决了,这很快!我的观点是议程可能来自不同的来源(.org文件),为什么不使用类似寄存器的东西来打开各自的议程文件呢?我确实使用各种组织文件。我像这样加载它们(setq组织议程文件(append(file expand wildcards“~/.agenda/*.org”)(file expand wildcards“~/.agenda/***.org”!))`.这些文件会随着时间的推移而变化,我不想用寄存器来识别它们。