在 elisp 中迭代行或标题时,如何检测缓冲区的末尾?

How can I detect the end of the buffer when iterating over lines or headings in elisp?

TLDR 是代码:

(while (?????)
    (org-next-visible-heading 1)
    (org-todo 'todo)
)

为了在文件末尾或最后一个可见标题之后停止,我应该在条件 ????? 中输入什么?

较长的上下文:

我正在尝试使用 elisp 为 emacs 修改 org-mode 文件。我是 elisp 的新手,发现很难找到一些基本内容的相关文档。

我想遍历 org-mode 缓冲区中的标题并修改状态(即待办事项)关键字。我看到它建议如果我想修改缓冲区,最好不要使用 org-element-map 而是使用 org-next-visible-headingorg-forward-same-level 之类的东西,并且在每个点使用 org-todo修改标题。

我知道如何编写 while 循环,但我不知道如何编写条件,因为我无法找到如何检测我是否在缓冲区的末尾,即使虽然这似乎是一件微不足道的事情。

我很高兴得知有更好的方法来解决我的问题,但我仍然想知道一般情况下如何检测缓冲区的结尾。

您可以使用 org-map-entries 而不是循环。这是一个示例,几乎来自 doc,它将每个标题标记为一个 TODO 项:

(org-map-entries '(org-todo "TODO") t 'file 'archive 'comment)

它指定一个函数应用于每个标题:(org-todo "TODO");没有标签或 属性 匹配; file范围;并跳过 archivecomment 标题。

阅读链接文档并执行C-h f org-map-entries,但不要被函数的文档字符串吓到:org-map-entries非常强大,但需要一些时间才能理解如何使用它并利用它的力量。