我正在使用shell-command在emacs缓冲区中运行应用程序的输出。
(shell-command "verbose-app &" "*verbose-app*")
问题是这个命令非常冗长。这么多,emacs缓冲区有时需要几秒钟才能赶上。它与实际输出相差几秒钟。
有什么办法可以通过禁用某些东西加快输出滚动速度?像正则表达式匹配或语法高亮?
供将来参考:
详细应用是adb logcat。我改变了现有的功能:
(defun adb-logcat ()
(interactive)
(shell-command "adb logcat -v threadtime&" "*adb-logcat*")
(pop-to-buffer "*adb-logcat*")
(buffer-disable-undo))
以下内容:
(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))
现在滚动速度更快。耶!
答案 0 :(得分:10)
就像文档所说,shell-command
在劣质shell中运行命令,暗示shell-mode
。如果您只想要输出而不是任何功能,则使用start-process
运行命令可能更接近您想要的。
(start-process "*verbose-app*" "*verbose-app*"
"/bin/sh" "-c" "verbose-app")
将其包装成函数不应该太难。您可能想看看shell-command
如何实现异步命令;例如,如果您尝试在另一个已存在的情况下创建一个进程,它将询问是否应终止现有进程。 http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/simple.el#n2447可能是一个很好的起点。 (如果链接变坏,这是一个指向内部defun shell-command
的链接,指向一个关于处理&符号的注释。如果它在那里,该命令将异步运行。)
答案 1 :(得分:0)
如果命令是那么详细,那么实时捕获完整输出是否有用?也许你可以在后台运行verbose-app > app.log
然后在emacs中运行类似while true; do tail -n50 app.log; sleep 1; done
的内容来继续更新缓冲区以查看日志文件的最后几行。稍后,当您需要完整输出时,可以在emacs中打开日志文件。