gpt4 book ai didi

emacs - 如何异步运行 elisp 函数?

转载 作者:行者123 更新时间:2023-12-04 01:01:09 25 4
gpt4 key购买 nike

不知道的人,imenu是 emacs 中的一个东西,它允许模式将一个或多个菜单项插入菜单栏中。最常见的用法是从下拉菜单访问“目录”,因此用户可以快速跳转到文档中的函数或类或部分等的声明。

imenu 有几种不同的工作方式 - 在第一种也是更常用的方式中,主要模式为 imenu 提供正则表达式,而 imenu 使用这些正则表达式来执行缓冲区的扫描并构​​建索引。主要模式通过将正则表达式列表放入 imenu-generic-expression 来设置它。 .第二种方式是让主要模式执行自己的扫描。它可以通过设置变量 imenu-create-index-function 来做到这一点。到由 themode 定义的函数的名称,它返回一个包含目录的列表。

我在做后者 - imenu-create-index-function - 但有时 fn 需要很长时间才能运行,比如 3 或 4 秒或更长时间,这会卡住 UI。如果我使操作异步,那将解决该问题。

我知道异步进程。扫描逻辑在elisp中实现。是否可以在异步进程中运行 elisp?如果是这样,如何?

或者,有没有办法在 emacs 中异步运行常规 elisp,而无需求助于异步进程?

我认为字体锁定的方式是,它在空闲时字体化。它保持状态并一次一点字体化,总是记住它在哪里停止,还有什么需要字体化,自上次字体化运行以来发生了什么变化等等。我的理解是否正确?也许我可以使用这种增量方法。

推荐?

最佳答案

要异步运行 elisp,您可以使用 run-with-idle-timer run-with-timer .我想你会想要 idle版本。查看文档链接以获取更多详细信息。

注意:如果代码运行需要 3 或 4 秒,它仍然需要那么长时间(并且在运行时卡住您的 Emacs),所以如果您可以将工作分解成足够小的块,它只需要 0.5 秒或所以有时,这可能会奏效。

我一直在用的一个包, pabbrev.el ,非常好地使用空闲计时器 - 我从未注意到它正在运行。这可能是一个很好的包,可以检查它是如何分解工作的(它正在扫描所有打开的缓冲区并建立一个词频列表)。

关于emacs - 如何异步运行 elisp 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6073320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com