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

问题描述 投票:0回答:3

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

如果你想在背景中发生一切,你可能需要save-window-excursion而不是save-excursion


0
投票

来自Emacs manual

对用户来说是短暂的并且通常无趣的缓冲区具有以空格开头的名称,因此list-buffers和buffer-menu命令不提及它们(但是如果这样的缓冲区访问文件,则提到它)。以空格开头的名称最初也会禁用录制撤消信息;看到撤消。


0
投票

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

在Elisp中,通常可以通过直接调用`start-process'来获得更好的服务,因为它提供了更多的控制,并且没有强制使用shell(需要引用参数)。

© www.soinside.com 2019 - 2024. All rights reserved.