0

I have my eshell opened in a window and in another window I have *Scratch* as a open buffer. I want to redirect the output of a command like say ls to *Scratch*. Is it possible? If yes, then how can I do it? Thanks.

3

Yes:

ls >(get-buffer "*scratch*")

Or even

ls > #<buffer *scratch*>

See this question for more details.

  • Can you elaborate on your answer? – DoMiNeLa10 Feb 5 at 19:26
  • Just did! Hope this helps. – Fran Burstall Feb 5 at 19:32
  • I think you don't even need the word "buffer", ls > #<*scratch*> seems to work too. – Omar Feb 5 at 19:53
0

The following answer uses a different approach than was suggested by the original poster. In this example, we use shell-command-to-string: https://www.gnu.org/software/emacs/manual/html_node/elisp/Synchronous-Processes.html

The default-directory in this example is hard-coded to "~/", which may or may not be the default-directory of the *scratch* buffer. We use let* (instead of just plain old let) so that shell-command-to-string respects the hard-coded default-directory that was let*-bound on the preceding line. If the *scratch* buffer did not already exist, then a new one will be created and its default-directory will be "~/". We go to the bottom of the *scratch* buffer just in case point was somewhere else. If the buffer is not already visible, then display it in another window.

To try out this example, type M-x eval-expression and paste the snippet into the mini-buffer when prompted and press the return key.

(let* ((default-directory "~/")
       (string (shell-command-to-string "ls"))
       (buffer (get-buffer-create "*scratch*")))
  (with-current-buffer buffer
    (goto-char (point-max))
    (insert string))
  (unless (get-buffer-window "*scratch*")
    (display-buffer buffer t)))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.