1

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

3 回答 3

3

如果您希望一切都在后台发生,您可能需要save-window-excursion而不是save-excursion.

于 2012-11-12T23:26:54.543 回答
0

Emacs 手册

短暂且用户通常不感兴趣的缓冲区的名称以空格开头,因此 list-buffers 和 buffer-menu 命令不会提及它们(但如果这样的缓冲区访问文件,则会提及)。以空格开头的名称最初也会禁用记录撤消信息;请参阅撤消。

于 2012-11-12T17:46:41.610 回答
0

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

在 Elisp 中,直接调用 `start-process' 通常会为您提供更好的服务,因为它提供了更多控制权并且不强制使用 shell(需要引用参数)。

于 2012-11-12T17:50:07.620 回答