For example, I want to be able to type something like:
$ git diff | tempbuffer
and have the diff opened in a new, unsaved buffer.
For example, I want to be able to type something like:
$ git diff | tempbuffer
and have the diff opened in a new, unsaved buffer.
I made a package (e-sink)using information from the emacs wiki as a starting point. It works as you described and "tail"s the ouput instead of waiting until the process finishes to display everything.
My personal preference is for something you can type in Bash without having to manage any files:
emacsclient waits for you to be finished with the buffer before Bash deletes the temporary file.
I would use M-! (phils's answer) if I was starting the shell command from scratch and the above (which is similar to Sean's answer) if I was 'in the middle of something' in the shell and then decided 'I want to pipe this to Emacs'.
You can just use M-! -- it will run the command within the same cwd as your shell buffer, and output the results to a
*Shell Command Output*
buffer.Note that if the results are brief, that buffer will not be raised and the output will be copied to the echo area; however the buffer is still used and available. C-hf
shell-command
RET has details of what constitutes "brief" output:If you use
eshell
you can redirect output to a buffer, e.g.which creates a new buffer
bar
with the content 'foo'. For further details, see the Emacswiki at http://www.emacswiki.org/emacs/EshellRedirection.Unfortunately
emacsclient
doesn't read its standard input, so you need some kind of wrapper. Here's a Bash shell function that works for me: