创建缓冲区并立即隐藏它?

时间:2012-11-12 17:14:46

标签: emacs elisp

我正在寻找一种创建缓冲区并立即隐藏它的方法。它是技术信息的缓冲区,对用户不感兴趣,它与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))))

3 个答案:

答案 0 :(得分:2)

如果您希望在后台完成所有事情,则可能需要save-window-excursion而不是save-excursion

答案 1 :(得分:0)

来自Emacs manual

  

短暂且通常对用户无趣的缓冲区   名称以空格开头,以便列表缓冲区和   buffer-menu命令没有提到它们(但是如果这样的缓冲区访问了一个   文件,提到)。最初也是以空格开头的名称   禁止录制撤消信息;见撤消。

答案 2 :(得分:0)

为了更好地控制缓冲区行为,您可能希望使用start-process而不是async-shell-command。从其文档:

  

在Elisp中,通常可以通过调用“start-process”来获得更好的服务   直接,因为它提供更多的控制,而不是强制使用   一个shell(需要引用参数)。