我如何告诉emacs在调用像这样的*Shell Command Output*命令时不弹出shell缓冲区?
(shell-command MY_COMMAND)当前emacs将当前窗口一分为二,显示输出缓冲区(大部分是不相关的)。对我来说,如果我想以后再去查一查,那就足够了。
发布于 2012-07-23 23:08:01
也许使用shell-command是问题的根源。我想我用call-process找到了一个有效的解决方案,尽管可能有更优雅的方式:
(call-process-shell-command
"cat ~/.emacs.d/init.el"
nil "*Shell Command Output*" t
)发布于 2012-07-23 22:08:14
shell-command有一个可选参数OUTPUT-BUFFER,您可以在其中指定要输出到的缓冲区。如果它是t (实际上不是buffer-name,也不是nil),它将在当前缓冲区中输出。因此,我们将其封装到一个with-temp-buffer中,再也不用为它操心了:
(with-temp-buffer
(shell-command "cat ~/.emacs.d/init.el" t))发布于 2019-06-28 07:01:35
根据我的经验,如果 shell命令本身没有产生输出,那么emacs *Shell Command Output*缓冲区就不会弹出。
因此,要避免输出缓冲区,请使命令的输出静默。
一种简单的方法是:
" > /dev/null 2>&1"添加到任何外壳命令的末尾。(警告:我不确定/dev/null是否存在于100%可以运行emacs的平台上,但在每个Linux发行版上都应该可以。)
如果对elisp函数shell-command的调用是在elisp脚本中进行的,那么您可以更改以下内容:
(shell-command cmd)要这样做:
(shell-command (concat cmd " > /dev/null 2>&1"))如果您偶尔想要监视输出,那么您可以创建一个通过/dev/null抑制输出的包装器函数,以及一个没有抑制的包装器函数,并根据需要在它们之间切换。
上述建议在lcy01-07上的GNU Emacs24.5.1 (x86_64-pc-linux-gnu,GTK+ Version 3.18.9)上进行了测试
https://stackoverflow.com/questions/11613974
复制相似问题