From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: Re: [babel] options to the example directive Date: Wed, 04 Nov 2009 13:52:55 -0500 Message-ID: <87vdhqcebc.fsf@stats.ox.ac.uk> References: <87ljinwtdm.wl%ucecesf@ucl.ac.uk> <87ws27jyv7.fsf@stats.ox.ac.uk> <87639qy672.wl%ucecesf@ucl.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1N5kyg-0003Ok-As for emacs-orgmode@gnu.org; Wed, 04 Nov 2009 13:53:06 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1N5kyb-0003Mu-JP for emacs-orgmode@gnu.org; Wed, 04 Nov 2009 13:53:06 -0500 Received: from [199.232.76.173] (port=33796 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N5kyb-0003Mo-Gb for emacs-orgmode@gnu.org; Wed, 04 Nov 2009 13:53:01 -0500 Received: from markov.stats.ox.ac.uk ([163.1.210.1]:33575) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1N5kyb-0002DC-07 for emacs-orgmode@gnu.org; Wed, 04 Nov 2009 13:53:01 -0500 In-Reply-To: <87639qy672.wl%ucecesf@ucl.ac.uk> (Eric S. Fraga's message of "Wed, 04 Nov 2009 09:45:05 +0000") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric S Fraga Cc: emacs org-mode mailing list --=-=-= Eric S Fraga writes: > At Tue, 03 Nov 2009 13:57:22 -0700, > Eric Schulte wrote: >> >> Dan Davison writes: >> >> > >> > This is a consequence of the same issue: org-exp-blocks preprocesses >> > your src block in a pre-export buffer (a copy of the original), hands it >> > to org-babel, which creates the results block (overwriting the version >> > where you had manually inserted switches), and that results block lacks >> > any switches. >> > >> >> Would it be worthwhile to add a :results_switches header argument for >> passing switches through to a results block? If that would solve the >> problem it should be easy to implement. Best -- Eric > > Dan & Eric, I think this would be ideal, and results_switches is a > perfectly fine name. That's in branch results-switches at git://repo.or.cz/org-mode/babel.git, with patch below. Dan --=-=-= Content-Disposition: inline; filename=patch diff --git a/contrib/babel/lisp/org-babel.el b/contrib/babel/lisp/org-babel.el index 90ac447..1e04efe 100644 --- a/contrib/babel/lisp/org-babel.el +++ b/contrib/babel/lisp/org-babel.el @@ -175,7 +175,7 @@ the header arguments specified at the source code block." ;; (message "supplied params=%S" params) ;; debugging (let* ((info (or info (org-babel-get-src-block-info))) (lang (first info)) - (params (org-babel-merge-params (third info) params)) + (params (setf (third info) (org-babel-merge-params (third info) params))) (body (if (assoc :noweb params) (org-babel-expand-noweb-references info) (second info))) (processed-params (org-babel-process-params params)) @@ -192,7 +192,7 @@ the header arguments specified at the source code block." (funcall cmd body params))) (if (eq result-type 'value) (setq result (org-babel-process-value-result result result-params))) - (org-babel-insert-result result result-params) + (org-babel-insert-result result result-params info) result)) (defun org-babel-load-in-session (&optional arg info) @@ -473,7 +473,7 @@ buffer or nil if no such result exists." (concat "#\\+resname:[ \t]*" (regexp-quote name) "[ \t\n\f\v\r]") nil t) (move-beginning-of-line 0) (point)))) -(defun org-babel-where-is-src-block-result (&optional insert) +(defun org-babel-where-is-src-block-result (&optional insert info) "Return the point at the beginning of the result of the current source block. Specifically at the beginning of the #+RESNAME: line. If no result exists for this block then create a @@ -482,7 +482,7 @@ line. If no result exists for this block then create a (let* ((on-lob-line (progn (beginning-of-line 1) (looking-at org-babel-lob-one-liner-regexp))) (name (if on-lob-line (first (org-babel-lob-get-info)) - (fifth (org-babel-get-src-block-info)))) + (fifth (or info (org-babel-get-src-block-info))))) (head (unless on-lob-line (org-babel-where-is-src-block-head))) end) (when head (goto-char head)) (or (and name (org-babel-find-named-result name)) @@ -528,7 +528,7 @@ line. If no result exists for this block then create a (mapcar #'org-babel-read row))) (org-table-to-lisp))) -(defun org-babel-insert-result (result &optional insert) +(defun org-babel-insert-result (result &optional insert info) "Insert RESULT into the current buffer after the end of the current source block. With optional argument INSERT controls insertion of results in the org-mode file. INSERT can take the @@ -566,7 +566,7 @@ code ---- the results are extracted in the syntax of the source (if (member "file" insert) (setq result (org-babel-result-to-file result)))) (unless (listp result) (setq result (format "%S" result)))) (if (and insert (member "replace" insert) (not (member "silent" insert))) - (org-babel-remove-result)) + (org-babel-remove-result info)) (if (= (length result) 0) (if (member "value" result-params) (message "No result returned by source block") @@ -578,28 +578,30 @@ code ---- the results are extracted in the syntax of the source (string-equal (substring result -1) "\r")))) (setq result (concat result "\n"))) (save-excursion - (let ((existing-result (org-babel-where-is-src-block-result t))) - (when existing-result (goto-char existing-result) (forward-line 1))) - (cond - ;; assume the result is a table if it's not a string - ((not (stringp result)) - (insert (concat (orgtbl-to-orgtbl - (if (and (listp (car result)) (listp (cdr (car result)))) - result (list result)) - '(:fmt (lambda (cell) (format "%S" cell)))) "\n")) - (forward-line -1) (org-cycle)) - ((member "file" insert) - (insert result)) - ((member "html" insert) - (insert (format "#+BEGIN_HTML\n%s#+END_HTML\n" result))) - ((member "latex" insert) - (insert (format "#+BEGIN_LaTeX\n%s#+END_LaTeX\n" result))) - ((member "code" insert) - (insert (format "#+BEGIN_SRC %s\n%s#+END_SRC\n" lang result))) - ((or (member "raw" insert) (member "org" insert)) - (save-excursion (insert result)) (if (org-at-table-p) (org-cycle))) - (t - (org-babel-examplize-region (point) (progn (insert result) (point)))))) + (let ((existing-result (org-babel-where-is-src-block-result t info)) + (results-switches (cdr (assoc :results_switches (third info))))) + (when existing-result (goto-char existing-result) (forward-line 1)) + (setq results-switches (if results-switches (concat " " results-switches) "")) + (cond + ;; assume the result is a table if it's not a string + ((not (stringp result)) + (insert (concat (orgtbl-to-orgtbl + (if (and (listp (car result)) (listp (cdr (car result)))) + result (list result)) + '(:fmt (lambda (cell) (format "%S" cell)))) "\n")) + (forward-line -1) (org-cycle)) + ((member "file" insert) + (insert result)) + ((member "html" insert) + (insert (format "#+BEGIN_HTML%s\n%s#+END_HTML\n" results-switches result))) + ((member "latex" insert) + (insert (format "#+BEGIN_LaTeX%s\n%s#+END_LaTeX\n" results-switches result))) + ((member "code" insert) + (insert (format "#+BEGIN_SRC %s%s\n%s#+END_SRC\n" lang results-switches result))) + ((or (member "raw" insert) (member "org" insert)) + (save-excursion (insert result)) (if (org-at-table-p) (org-cycle))) + (t + (org-babel-examplize-region (point) (progn (insert result) (point)) results-switches))))) (message "finished")))) (defun org-babel-result-to-org-string (result) @@ -607,11 +609,11 @@ code ---- the results are extracted in the syntax of the source relies on `org-babel-insert-result'." (with-temp-buffer (org-babel-insert-result result) (buffer-string))) -(defun org-babel-remove-result () +(defun org-babel-remove-result (&optional info) "Remove the result of the current source block." (interactive) (save-excursion - (goto-char (org-babel-where-is-src-block-result t)) (forward-line 1) + (goto-char (org-babel-where-is-src-block-result t info)) (forward-line 1) (delete-region (point) (org-babel-result-end)))) (defun org-babel-result-end () @@ -643,7 +645,7 @@ RESULT, and the display being the `file-name-nondirectory' if non-nil." (concat "[[file:" result "]]")) -(defun org-babel-examplize-region (beg end) +(defun org-babel-examplize-region (beg end results-switches) "Comment out region using the ': ' org example quote." (interactive "*r") (let ((size (abs (- (line-number-at-pos end) @@ -660,7 +662,7 @@ non-nil." (move-beginning-of-line 1) (insert ": ") (forward-line 1))) (t (goto-char beg) - (insert "#+begin_example\n") + (insert (format "#+begin_example%s\n" results-switches)) (forward-char (- end beg)) (insert "#+end_example\n")))))) --=-=-= > > Thanks, > eric --=-=-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode --=-=-=--