diff --git a/doc/org.texi b/doc/org.texi index 2c4e12d15..234977827 100644 --- a/doc/org.texi +++ b/doc/org.texi @@ -726,6 +726,8 @@ Specific header arguments * eval:: Limit evaluation of specific code blocks * wrap:: Mark source block evaluation 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 @@ -14172,6 +14174,8 @@ argument in lowercase letters. The following header arguments are defined: * eval:: Limit evaluation of specific code blocks * wrap:: Mark source block evaluation 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 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 @code{#+BEGIN/END_RESULTS} block. -@node post, , wrap, Specific header arguments +@node post, prologue, wrap, Specific header arguments @subsubsection @code{:post} 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 @@ -15153,6 +15157,24 @@ argument. :END: @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 @section Results of evaluation @cindex code block, results of evaluation diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 9fddae370..b8cd3f7cf 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -444,6 +444,7 @@ then run `org-babel-switch-to-session'." (dir . :any) (eval . ((never query))) (exports . ((code results both none))) + (epilogue . :any) (file . :any) (file-desc . :any) (hlines . ((no yes))) @@ -455,6 +456,7 @@ then run `org-babel-switch-to-session'." (noweb-sep . :any) (padline . ((yes no))) (post . :any) + (prologue . :any) (results . ((file list vector table scalar verbatim) (raw html latex org code pp drawer) (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 called for languages which have not defined their own specific 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 (defun org-babel-expand-src-block (&optional arg info params) diff --git a/lisp/ob-gnuplot.el b/lisp/ob-gnuplot.el index 55d6d17ee..cc9186b1a 100644 --- a/lisp/ob-gnuplot.el +++ b/lisp/ob-gnuplot.el @@ -68,13 +68,6 @@ (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* '((eps . "postscript eps")) "List of file extensions and the associated gnuplot terminal." @@ -103,7 +96,9 @@ code." (save-window-excursion (let* ((vars (org-babel-gnuplot-process-vars 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 (let ((ext (file-name-extension out-file))) (or (cdr (assoc (intern (downcase ext)) @@ -166,8 +161,8 @@ code." (setq body (replace-regexp-in-string (format "\\$%s" (car pair)) (cdr pair) body))) vars) - (when *org-babel-gnuplot-prefix* - (funcall add-to-body *org-babel-gnuplot-prefix*))) + (when prologue (funcall add-to-body prologue)) + (when epilogue (setq body (concat body "\n" epilogue)))) body)) (defun org-babel-execute:gnuplot (body params)