我正在寻找一种创建缓冲区并立即隐藏它的方法。它是技术信息的缓冲区,对用户不感兴趣,它与shell-command
一起用于处理输出。
kill-buffer
- 不是我需要的,因为我需要缓冲区才能生效。
delete-window
- 不会这样做,因为无法确定缓冲区的打开程度(它可能会创建一个新窗口或者可能会占用另一个窗口)。
如果我在将缓冲区提供给shell-command
之前创建缓冲区没有帮助。无论之前是否存在缓冲区,它都会将它带到前面,如果它只做了一个窗口,它会创建一个额外的窗口,但如果有更多的窗口,那么它基本上是随机的。有时它会创建一个新窗口......有时它不会。
编辑:
以下示例说明了问题:
(defun haxe-start-waiting-server (&optional compiler host port)
"Starts Haxe `haxe-compiler' on `haxe-server-host':`haxe-server-port'
with \"--wait\" for the future requests made by autocompletion
or flymake.
This function is bound to \\[haxe-start-waiting-server]"
(interactive
(let ((compiler-i
(read-string "Haxe compiler: "
haxe-compiler t haxe-compiler))
(host-i
(read-string "Haxe server host: "
haxe-server-host t haxe-server-host))
(port-i
(read-number "Haxe server port: " haxe-server-port)))
(list compiler-i host-i port-i)))
(unless (called-interactively-p 'interactive)
(unless compiler (setq compiler haxe-compiler))
(unless host (setq compiler haxe-server-host))
(unless port (setq compiler haxe-server-port)))
(save-excursion
(let ((new-buffer
(get-buffer-create
(generate-new-buffer-name
" *haxe-waiting-server*"))))
(async-shell-command
(concat compiler " --wait "
host ":" (number-to-string port))
new-buffer)
(bury-buffer new-buffer))))
答案 0 :(得分:2)
如果您希望在后台完成所有事情,则可能需要save-window-excursion
而不是save-excursion
。
答案 1 :(得分:0)
来自Emacs manual:
短暂且通常对用户无趣的缓冲区 名称以空格开头,以便列表缓冲区和 buffer-menu命令没有提到它们(但是如果这样的缓冲区访问了一个 文件,提到)。最初也是以空格开头的名称 禁止录制撤消信息;见撤消。
答案 2 :(得分:0)
为了更好地控制缓冲区行为,您可能希望使用start-process
而不是async-shell-command
。从其文档:
在Elisp中,通常可以通过调用“start-process”来获得更好的服务 直接,因为它提供更多的控制,而不是强制使用 一个shell(需要引用参数)。