我有一个Emacs命令如下:
(defun query-lisp (word)
(interactive "sType a word to query:")
(message "%s" (query word)))
query
操作是一项耗时的操作。当此命令运行时,Emacs 会阻塞整个框架。是否有方法可以让 Emacs 在后台运行此命令或者只阻塞单个窗口(例如迷你缓冲区)?
(start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)
这将返回一个"process"对象。你可以将输出发送到缓冲区,或者你可以将一个“过滤函数”附加到进程上。在后一种情况下,这是一个每当进程发出任何输出时都会被调用的函数。Emacs没有线程。对于长时间的操作,你可以将任务分成几个部分,并在空闲时间使用空闲定时器来执行这些部分,这样Emacs可以在各个部分之间响应用户输入。
另一种可能性是将其作为外部进程运行,从中Emacs接受输出。
(shell-command "sleep 10 && echo 'finished' &")
*异步Shell命令*
缓冲区中。shell-command
和async-shell-command
(后者相当于(shell-command "... &")
)的好处在于它们可以交互式调用,并分别绑定到M-!
和M-&
。 - GDP2