我正在寻找一种方法来创建缓冲区并立即隐藏它。它是技术信息的缓冲区,对用户来说并不感兴趣,它与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))))
如果你想在背景中发生一切,你可能需要save-window-excursion
而不是save-excursion
。
来自Emacs manual:
对用户来说是短暂的并且通常无趣的缓冲区具有以空格开头的名称,因此list-buffers和buffer-menu命令不提及它们(但是如果这样的缓冲区访问文件,则提到它)。以空格开头的名称最初也会禁用录制撤消信息;看到撤消。
为了更好地控制缓冲行为,您可能希望使用start-process
而不是async-shell-command
。从其文件:
在Elisp中,通常可以通过直接调用`start-process'来获得更好的服务,因为它提供了更多的控制,并且没有强制使用shell(需要引用参数)。