Emacs可以在后台运行命令

时间:2011-12-28 08:12:03

标签: emacs elisp

我有一个Emacs命令如下:

(defun query-lisp (word)
  (interactive "sType a word to query:")
  (message "%s" (query word)))

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

3 个答案:

答案 0 :(得分:11)

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

 (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS)

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

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

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:4)

例如,你可以使用这样的东西

(shell-command "sleep 10 && echo 'finished' &")

结果将显示在*Async Shell Command*缓冲区中。