emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [babel] options to the example directive


From: Dan Davison
Subject: Re: [Orgmode] [babel] options to the example directive
Date: Wed, 04 Nov 2009 13:52:55 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

Eric S Fraga <address@hidden> writes:

> At Tue, 03 Nov 2009 13:57:22 -0700,
> Eric Schulte wrote:
>> 
>> Dan Davison <address@hidden> 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

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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]