如何加速异步shell命令的emacs输出?

hyp*_*gic 19 emacs shell elisp

我正在使用shell-command在emacs缓冲区中运行应用程序的输出.

(shell-command "verbose-app &" "*verbose-app*")
Run Code Online (Sandbox Code Playgroud)

问题是这个命令非常冗长.这么多,emacs缓冲区有时需要几秒钟才能赶上.它与实际输出相差几秒钟.

有什么办法可以通过禁用某些东西加快输出滚动速度吗?像正则表达式匹配或语法高亮?

备查:

详细的应用程序是adb logcat.我改变了现有的功能:

(defun adb-logcat ()
  (interactive)
  (shell-command "adb logcat -v threadtime&" "*adb-logcat*")
  (pop-to-buffer "*adb-logcat*")
  (buffer-disable-undo))
Run Code Online (Sandbox Code Playgroud)

以下内容:

(defun adb-logcat ()
  (interactive)
  (start-process "*adb-logcat*" "*adb-logcat*" "/bin/sh" "-c" "adb logcat -v threadtime")
  (pop-to-buffer "*adb-logcat*")
  (buffer-disable-undo))
Run Code Online (Sandbox Code Playgroud)

它现在滚动得更快.好极了!

tri*_*eee 10

就像文档说的那样,shell-command在劣质shell中运行命令,这意味着shell-mode.如果您只想要输出而不需要任何功能,则运行命令start-process可能更接近您想要的.

(start-process "*verbose-app*" "*verbose-app*"
 "/bin/sh" "-c" "verbose-app")
Run Code Online (Sandbox Code Playgroud)

把它包装成一个函数应该不会太难.您可能想看一下如何shell-command实现异步命令; 例如,如果您尝试在另一个已存在的情况下创建一个进程,它将询问是否应终止现有进程. http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/simple.el#n2447可能是一个很好的起点.(如果链接变坏,这是一个内部链接defun shell-command,指向有关处理&符号的注释.如果它在那里,该命令将异步运行.)