How to redirect message/echo output to a buffer in Emacs?
emacs
Solution
No, there's no such redirect, sadly. You can try to advise the `message` function, which will catch many of those messages, tho not necessarily all of them.
(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))
Problem
I'm writing a couple of helper functions for my use. They first call up `org-publish-project` and then call external scripts on that output. I'd like to collect all output from the execution in a temp buffer that pops up. The external stuff is easier. The function `shell-command` accepts a second argument about a buffer where to send stdout. But `org-publish-project` only echoes stuff to minibuffer and it shows on `*Messages*` if anywhere. Could I somehow redirect all echoes to a given buffer?