Emacs可以在后台运行命令

Dou*_*ouO 8 emacs elisp

我有一个Emacs命令,如下所示:

(defun query-lisp (word)
  (interactive "sType a word to query:")
  (message "%s" (query word)))
Run Code Online (Sandbox Code Playgroud)

query操作是耗时的操作.当此命令运行时,Emacs会阻止整个帧.有没有办法让Emacs在后台运行此命令或只阻止一个窗口,如迷你缓冲区?

Lin*_*cer 11

如果您打算使用外部流程(已在另一个问题的评论中指明),则可以使用以下内容:

 (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)
Run Code Online (Sandbox Code Playgroud)

这将返回一个进程对象.您可以将输出发送到缓冲区,也可以将过滤器函数附加到进程.在后一种情况下,这是一个在每次进程发出任何输出时调用的函数.

此外,您可以将哨兵功能附加到您的流程.每次进程状态发生变化时都会调用此函数,这有助于找出它何时退出.

在Emacs的源代码中有以上几个例子,一个这样的例子是compile.el.


Tom*_*Tom 9

Emacs没有线程.对于长时间操作,您可以将任务拆分为块并在空闲计时器中执行块,以便emacs可以响应块之间的用户输入.

另一种可能性是将其作为外部进程运行,emacs接受输出.

  • 信息为+1.实际上我写的查询函数是python并通过pymacs加载到emacs,所以我认为外部过程可能是一个解决方案,你能详细介绍外部过程如何与emacs交互吗? (2认同)