emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: "Arthur A. Gleckler" <orgmode@speechcode.com>
To: emacs-orgmode@gnu.org
Subject: send block evaluation results to specified buffer
Date: Wed, 11 Sep 2019 18:14:59 -0700	[thread overview]
Message-ID: <CALnw4L+xJd3Wo+_nCUWRTihNKrBz3LQJtPXRifaDur9t7FRuRA@mail.gmail.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 578 bytes --]

Attached is a patch to allow one to specify that results from executing a
block should go to a specific buffer.

When a :buffer is specified, output goes to that buffer, which is erased
first, e.g.:

  #+begin_src sh :results buffer :buffer *foo*
  echo foo
  #+end_src

When no :buffer is specified, buffer *org results* is used, e.g.:

  #+begin_src sh :results buffer
  echo foo
  #+end_src

I've tried to follow the conventions for contributions to Org mode, buf if
I've missed something, please let me know.  (I'm happy to sign the FSF
paperwork.)

Thank you for Org mode!

[-- Attachment #1.2: Type: text/html, Size: 829 bytes --]

[-- Attachment #2: 0001-ob-core.el-block-result-output-to-buffer.patch --]
[-- Type: text/x-patch, Size: 3794 bytes --]

From 52de54b8cf5b91ac01d3a566b3c1ca6176a9cb1d Mon Sep 17 00:00:00 2001
From: "Arthur A. Gleckler" <aag@alum.mit.edu>
Date: Wed, 11 Sep 2019 17:03:33 -0700
Subject: [PATCH] ob-core.el: block result output to buffer

* lisp/ob-core.el (org-babel-execute-src-block): Support buffers.
Allow specifying that results from executing a block should go to a
buffer.

When a :buffer is specified, output goes to that buffer, which is
erased first, e.g.:

  #+begin_src sh :results buffer :buffer *foo*
  echo foo
  #+end_src

When no :buffer is specified, buffer "*org results*" is used, e.g.:

  #+begin_src sh :results buffer
  echo foo
  #+end_src

Also fixed typo: "it's" vs. "its".
---
 doc/org-manual.org |  8 ++++++++
 lisp/ob-core.el    | 44 ++++++++++++++++++++++++++++----------------
 2 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/doc/org-manual.org b/doc/org-manual.org
index f2f059e77..8e2715eeb 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -17333,6 +17333,14 @@ default behavior is to automatically determine the result type.
   TAB-delimited output.  You can choose a different separator with
   the =sep= header argument.
 
+- =buffer= ::
+
+  Save results to a specific buffer.  Erase the buffer, save the
+  results of execution of the code block to that buffer, then display
+  it.  The buffer name may be specified in the =:buffer= header
+  argument.  If it's not specified, the buffer =*org results*= is
+  used.
+
 *** Format
 :PROPERTIES:
 :UNNUMBERED: notoc
diff --git a/lisp/ob-core.el b/lisp/ob-core.el
index 97ec18fd1..1537b4363 100644
--- a/lisp/ob-core.el
+++ b/lisp/ob-core.el
@@ -707,22 +707,33 @@ block."
 			       (not (listp r)))
 			  (list (list r))
 			r)))
-	      (let ((file (and (member "file" result-params)
+	      (let ((buffer (and (member "buffer" result-params)
+				 (get-buffer-create
+				  (or (cdr (assq :buffer params))
+				      "*org result*"))))
+		    (file (and (member "file" result-params)
 			       (cdr (assq :file params)))))
 		;; If non-empty result and :file then write to :file.
-		(when file
-		  ;; If `:results' are special types like `link' or
-		  ;; `graphics', don't write result to `:file'.  Only
-		  ;; insert a link to `:file'.
-		  (when (and result
-			     (not (or (member "link" result-params)
-				      (member "graphics" result-params))))
-		    (with-temp-file file
-		      (insert (org-babel-format-result
-			       result
-			       (cdr (assq :sep params))))))
-		  (setq result file))
-		;; Possibly perform post process provided its
+		(cond (buffer
+		       (with-current-buffer buffer
+			 (erase-buffer)
+			 (insert (org-babel-format-result
+				  result
+				  (cdr (assq :sep params)))))
+		       (display-buffer buffer))
+		      (file
+		       ;; If `:results' are special types like `link' or
+		       ;; `graphics', don't write result to `:file'.  Only
+		       ;; insert a link to `:file'.
+		       (when (and result
+				  (not (or (member "link" result-params)
+					   (member "graphics" result-params))))
+			 (with-temp-file file
+			   (insert (org-babel-format-result
+				    result
+				    (cdr (assq :sep params))))))
+		       (setq result file)))
+		;; Possibly perform post process provided it's
 		;; appropriate.  Dynamically bind "*this*" to the
 		;; actual results of the block.
 		(let ((post (cdr (assq :post params))))
@@ -735,8 +746,9 @@ block."
 		      (setq result (org-babel-ref-resolve post))
 		      (when file
 			(setq result-params (remove "file" result-params))))))
-		(org-babel-insert-result
-		 result result-params info new-hash lang)))
+		(unless buffer
+		  (org-babel-insert-result
+		   result result-params info new-hash lang))))
 	    (run-hooks 'org-babel-after-execute-hook)
 	    result)))))))
 
-- 
2.20.1


             reply	other threads:[~2019-09-12  1:15 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-12  1:14 Arthur A. Gleckler [this message]
2021-12-20 14:03 ` [O] " Ihor Radchenko
2021-12-20 15:35   ` Arthur A. Gleckler
  -- strict thread matches above, loose matches on Subject: below --
2019-09-12  0:44 Arthur A. Gleckler
2019-09-12  0:45 ` Arthur A. Gleckler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CALnw4L+xJd3Wo+_nCUWRTihNKrBz3LQJtPXRifaDur9t7FRuRA@mail.gmail.com \
    --to=orgmode@speechcode.com \
    --cc=emacs-orgmode@gnu.org \
    --subject='Re: send block evaluation results to specified buffer' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).