在 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-heading
或 org-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
范围;并跳过 archive
和 comment
标题。
阅读链接文档并执行C-h f org-map-entries
,但不要被函数的文档字符串吓到:org-map-entries
非常强大,但需要一些时间才能理解如何使用它并利用它的力量。
TLDR 是代码:
(while (?????)
(org-next-visible-heading 1)
(org-todo 'todo)
)
为了在文件末尾或最后一个可见标题之后停止,我应该在条件 ?????
中输入什么?
较长的上下文:
我正在尝试使用 elisp 为 emacs 修改 org-mode 文件。我是 elisp 的新手,发现很难找到一些基本内容的相关文档。
我想遍历 org-mode 缓冲区中的标题并修改状态(即待办事项)关键字。我看到它建议如果我想修改缓冲区,最好不要使用 org-element-map
而是使用 org-next-visible-heading
或 org-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
范围;并跳过 archive
和 comment
标题。
阅读链接文档并执行C-h f org-map-entries
,但不要被函数的文档字符串吓到:org-map-entries
非常强大,但需要一些时间才能理解如何使用它并利用它的力量。