我正在编写一些辅助函数供我使用。他们首先调用org-publish-project
,然后在该输出上调用外部脚本。我想在弹出的临时缓冲区中收集执行中的所有输出。
外部的东西更容易。函数shell-command
接受关于缓冲区发送stdout的第二个参数。但是org-publish-project
只会向迷你缓冲区回复内容,如果在任何地方,它会显示在*Messages*
上。我可以以某种方式将所有回声重定向到给定的缓冲区吗?
答案 0 :(得分:3)
不,遗憾的是,没有这样的重定向。您可以尝试建议message
函数,它将捕获许多这些消息,而不一定是所有消息。
(defvar my-message-output-buffer nil)
(defadvice message (around my-redirect activate)
(if my-message-output-buffer
(with-current-buffer my-message-output-buffer
(insert (apply #'format (ad-get-args 0))))
ad-do-it))
答案 1 :(得分:2)
根据org-publish-project
内部用于显示消息的内容,以下内容可能有效:
(with-output-to-temp-buffer "*foo*"
(do-stuff))
(pop-to-buffer "*foo*")
答案 2 :(得分:0)
要暂时将所有消息输出重定向到当前缓冲区,请执行以下操作:
(defvar orig-message (symbol-function 'message))
(defun message-to-buffer (format-string &rest args)
(insert (apply 'format format-string args) "\n"))
(defmacro with-messages-to-buffer (&rest body)
`(progn (fset 'message (symbol-function 'message-to-buffer))
(unwind-protect
(progn ,@body)
(fset 'message orig-message))))
;; Usage
(with-messages-to-buffer
(message "hello"))