Browse Source

prolog and epilog header arguments

* lisp/ob-gnuplot.el (org-babel-expand-body:gnuplot): Use new header
  arguments.
* lisp/ob-core.el (org-babel-common-header-args-w-values): Mention new
  header arguments.
  (org-babel-expand-body:generic): Use new header arguments.
* doc/org.texi (Specific header arguments): Document new header
  arguments.
Eric Schulte 11 years ago
parent
commit
56ac8f8b69
3 changed files with 38 additions and 12 deletions
  1. 23 1
      doc/org.texi
  2. 10 1
      lisp/ob-core.el
  3. 5 10
      lisp/ob-gnuplot.el

+ 23 - 1
doc/org.texi

@@ -726,6 +726,8 @@ Specific header arguments
 * eval::                        Limit evaluation of specific code blocks
 * eval::                        Limit evaluation of specific code blocks
 * wrap::                        Mark source block evaluation results
 * wrap::                        Mark source block evaluation results
 * post::                        Post processing of code block results
 * post::                        Post processing of code block results
+* prologue::                    Text to prepend to code block body
+* epilogue::                    Text to append to code block body
 
 
 Miscellaneous
 Miscellaneous
 
 
@@ -14172,6 +14174,8 @@ argument in lowercase letters.  The following header arguments are defined:
 * eval::                        Limit evaluation of specific code blocks
 * eval::                        Limit evaluation of specific code blocks
 * wrap::                        Mark source block evaluation results
 * wrap::                        Mark source block evaluation results
 * post::                        Post processing of code block results
 * post::                        Post processing of code block results
+* prologue::                    Text to prepend to code block body
+* epilogue::                    Text to append to code block body
 @end menu
 @end menu
 
 
 Additional header arguments are defined on a language-specific basis, see
 Additional header arguments are defined on a language-specific basis, see
@@ -15118,7 +15122,7 @@ to @code{#+BEGIN_} and @code{#+END_}, which will then be used to wrap the
 results.  If not string is specified then the results will be wrapped in a
 results.  If not string is specified then the results will be wrapped in a
 @code{#+BEGIN/END_RESULTS} block.
 @code{#+BEGIN/END_RESULTS} block.
 
 
-@node post,  , wrap, Specific header arguments
+@node post, prologue, wrap, Specific header arguments
 @subsubsection @code{:post}
 @subsubsection @code{:post}
 The @code{:post} header argument is used to post-process the results of a
 The @code{:post} header argument is used to post-process the results of a
 code block execution.  When a post argument is given, the results of the code
 code block execution.  When a post argument is given, the results of the code
@@ -15153,6 +15157,24 @@ argument.
 :END:
 :END:
 @end example
 @end example
 
 
+@node prologue, epilogue, post, Specific header arguments
+
+The value of the @code{prologue} header argument will be prepended to the
+code block body before execution.  For example, @code{:prologue "reset"} may
+be used to reset a gnuplot session before execution of a particular code
+block, or the following configuration may be used to do this for all gnuplot
+code blocks.  Also see @ref{epilogue}.
+
+@lisp
+(add-to-list 'org-babel-default-header-args:gnuplot
+             '((:prologue . "reset")))
+@end lisp
+
+@node epilogue, , prologue, Specific header arguments
+
+The value of the @code{epilogue} header argument will be appended to the code
+block body before execution.  Also see @ref{prologue}.
+
 @node Results of evaluation, Noweb reference syntax, Header arguments, Working With Source Code
 @node Results of evaluation, Noweb reference syntax, Header arguments, Working With Source Code
 @section Results of evaluation
 @section Results of evaluation
 @cindex code block, results of evaluation
 @cindex code block, results of evaluation

+ 10 - 1
lisp/ob-core.el

@@ -444,6 +444,7 @@ then run `org-babel-switch-to-session'."
     (dir	. :any)
     (dir	. :any)
     (eval	. ((never query)))
     (eval	. ((never query)))
     (exports	. ((code results both none)))
     (exports	. ((code results both none)))
+    (epilogue   . :any)
     (file	. :any)
     (file	. :any)
     (file-desc  . :any)
     (file-desc  . :any)
     (hlines	. ((no yes)))
     (hlines	. ((no yes)))
@@ -455,6 +456,7 @@ then run `org-babel-switch-to-session'."
     (noweb-sep  . :any)
     (noweb-sep  . :any)
     (padline	. ((yes no)))
     (padline	. ((yes no)))
     (post       . :any)
     (post       . :any)
+    (prologue   . :any)
     (results	. ((file list vector table scalar verbatim)
     (results	. ((file list vector table scalar verbatim)
 		   (raw html latex org code pp drawer)
 		   (raw html latex org code pp drawer)
 		   (replace silent none append prepend)
 		   (replace silent none append prepend)
@@ -671,7 +673,14 @@ Expand a block of code with org-babel according to its header
 arguments.  This generic implementation of body expansion is
 arguments.  This generic implementation of body expansion is
 called for languages which have not defined their own specific
 called for languages which have not defined their own specific
 org-babel-expand-body:lang function."
 org-babel-expand-body:lang function."
-  (mapconcat #'identity (append var-lines (list body)) "\n"))
+  (let ((pro (cdr (assoc :prologue params)))
+	(epi (cdr (assoc :epilogue params))))
+    (mapconcat #'identity
+	       (append (when pro (list pro))
+		       var-lines
+		       (list body)
+		       (when epi (list epi)))
+	       "\n")))
 
 
 ;;;###autoload
 ;;;###autoload
 (defun org-babel-expand-src-block (&optional arg info params)
 (defun org-babel-expand-src-block (&optional arg info params)

+ 5 - 10
lisp/ob-gnuplot.el

@@ -68,13 +68,6 @@
 
 
 (defvar *org-babel-gnuplot-missing* nil)
 (defvar *org-babel-gnuplot-missing* nil)
 
 
-(defcustom *org-babel-gnuplot-prefix* nil
-  "Optional prefix to send to gnuplot before the body of every code block.
-For example \"reset\" may be used to reset gnuplot between
-blocks."
-  :group 'org-babel
-  :type 'string)
-
 (defcustom *org-babel-gnuplot-terms*
 (defcustom *org-babel-gnuplot-terms*
   '((eps . "postscript eps"))
   '((eps . "postscript eps"))
   "List of file extensions and the associated gnuplot terminal."
   "List of file extensions and the associated gnuplot terminal."
@@ -103,7 +96,9 @@ code."
   (save-window-excursion
   (save-window-excursion
     (let* ((vars (org-babel-gnuplot-process-vars params))
     (let* ((vars (org-babel-gnuplot-process-vars params))
            (out-file (cdr (assoc :file params)))
            (out-file (cdr (assoc :file params)))
-           (term (or (cdr (assoc :term params))
+	   (prologue (cdr (assoc :prologue params)))
+	   (epilogue (cdr (assoc :epilogue params)))
+	   (term (or (cdr (assoc :term params))
                      (when out-file
                      (when out-file
 		       (let ((ext (file-name-extension out-file)))
 		       (let ((ext (file-name-extension out-file)))
 			 (or (cdr (assoc (intern (downcase ext))
 			 (or (cdr (assoc (intern (downcase ext))
@@ -166,8 +161,8 @@ code."
 	      (setq body (replace-regexp-in-string
 	      (setq body (replace-regexp-in-string
 			  (format "\\$%s" (car pair)) (cdr pair) body)))
 			  (format "\\$%s" (car pair)) (cdr pair) body)))
 	    vars)
 	    vars)
-      (when *org-babel-gnuplot-prefix*
+      (when prologue (funcall add-to-body prologue))
-	(funcall add-to-body *org-babel-gnuplot-prefix*)))
+      (when epilogue (setq body (concat body "\n" epilogue))))
     body))
     body))
 
 
 (defun org-babel-execute:gnuplot (body params)
 (defun org-babel-execute:gnuplot (body params)