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

Emacs 在elisp中迭代行或标题时,如何检测缓冲区的结束?,emacs,org-mode,Emacs,Org Mode,TLDR是以下代码: (while (?????) (org-next-visible-heading 1) (org-todo 'todo) ) 我应该在条件???中添加什么内容才能在文件末尾或最后一个可见标题之后停止 较长的背景: 我正在尝试使用elisp修改emacs的组织模式文件。我是elisp的新手,发现很难找到一些基本内容的相关文档 我想在组织模式缓冲区中迭代标题,并修改status(即todo)关键字。我看到有人建议,如果我想修改缓冲区,最好不要使用org元素映射

TLDR是以下代码:

(while (?????)
    (org-next-visible-heading 1)
    (org-todo 'todo)
)
我应该在条件
???
中添加什么内容才能在文件末尾或最后一个可见标题之后停止

较长的背景:

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

我想在组织模式缓冲区中迭代标题,并修改status(即todo)关键字。我看到有人建议,如果我想修改缓冲区,最好不要使用
org元素映射
,而是使用类似
org-next-visible-heading
org-forward-one-level
,并在每个点使用
org-todo
来修改标题

我知道如何编写while循环,但我不知道如何编写条件,因为我无法找到如何检测我是否在缓冲区的末尾,尽管这似乎是一件小事


我很高兴有人告诉我有更好的方法解决我的问题,但我仍然想知道如何检测缓冲区的结束。

而不是循环,你可以使用
组织地图条目
。下面是一个例子,几乎来自,它将每个标题标记为待办事项:

(组织地图条目(组织todo“todo”)t'文件'存档'注释)
它指定了应用于每个标题的函数:
(org todo“todo”)
;没有标签或属性匹配<代码>文件范围;并跳过
存档
评论
标题


阅读链接的文档并执行组织图条目的C-h操作,但不要被函数的文档字符串吓到:
组织图条目的功能非常强大,但要理解如何使用它并利用它的功能需要一些时间。

请参阅
eobp
检查缓冲区是否结束,例如
(而不是(eobp))…)
@Rorschach你应该回答这个问题。另请参见点附近的
C-hig(elisp)
@Rorschach谢谢!如果你回答,我就标为接受。另外,您还可以使用
组织映射条目
在每个标题上映射函数。中有一些例子。我在该主题上找到的两篇帖子建议不要使用
组织地图条目
,因为它不是为了修改和保存缓冲区而设计的,而是为了返回新结果而设计的。作为一个新手,我不知道这是否准确。但更具体地说,我了解如何使用
组织地图条目
;一旦我有了结果,我不知道该怎么办!我可以轻松地用输出替换当前缓冲区吗?现在,我更多地停留在简单而不是困难的事情上。
org map entries
根据它对每个条目调用的函数是否修改缓冲区来修改(或不修改)缓冲区。它返回函数返回值的列表(每个标题对应一个条目)。它肯定不会保存缓冲区:这取决于您。所以我不知道你指的是什么帖子(如果可以的话,请提供参考资料),但在我看来,这些帖子并不准确,至少你描述它们的方式是这样的。我给出的示例通过将每个标题标记为待办事项来修改缓冲区。您可以将该缓冲区原样保存到同一个文件中(如果愿意,也可以另存一个文件)。也许你把它和你在问题中提到的
org element map
混淆了?尼克,你是对的,我把
org map条目
org element map
混淆了。如果
org map entries
可以修改输入缓冲区,那么我知道如何将其用作解决方案。谢谢在回答你的问题时,我看到的一个例子是——但这也是关于
组织元素映射的
组织元素映射
将解析树作为输入(组织模式缓冲区的内存表示形式,通常通过计算
(组织元素解析缓冲区)生成的)
在感兴趣的缓冲区中:此调用返回解析树)。然后,它遍历解析树,对找到的每个元素应用一个函数。虽然该函数可以修改解析树,但这并不是它的预期目的:它是一种(更快的)获取有关文件的有趣信息的方法,而不必仅依赖词法分析。。。