diff options
author | Eric Schulte <schulte.eric@gmail.com> | 2010-07-02 19:21:31 -0700 |
---|---|---|
committer | Eric Schulte <schulte.eric@gmail.com> | 2010-07-05 11:14:50 -0700 |
commit | 6c2e35003f72d610ae98a4d9013b04b47429131c (patch) | |
tree | 5d0b1eb63ed44f3ab5d19d3c2d2e4fcb85e85517 | |
parent | d7b7025eac365c6e72e596bee0b3e232cb687592 (diff) | |
download | org-mode-6c2e35003f72d610ae98a4d9013b04b47429131c.tar.gz |
babel: all languages compiling cleanly (but R has a small problem)
For some reason ob-R refuses to compile when it requires ob-comint.
When (require 'ob-comint) is not included in ob-R.el everything
compiles without error, but warnings are thrown because the
arguments to a macro defined in ob-comint are mis-interpreted as
functions.
When (require 'ob-comint) is added to ob-R.el then it throws errors
complaining that the last argument to a function is nil and should
be a string. I don't understand this error at all and can't fix it.
-rw-r--r-- | lisp/ob-C.el | 3 | ||||
-rw-r--r-- | lisp/ob-R.el | 13 | ||||
-rw-r--r-- | lisp/ob-asymptote.el | 3 | ||||
-rw-r--r-- | lisp/ob-clojure.el | 37 | ||||
-rw-r--r-- | lisp/ob-comint.el | 3 | ||||
-rw-r--r-- | lisp/ob-ditaa.el | 1 | ||||
-rw-r--r-- | lisp/ob-gnuplot.el | 24 | ||||
-rw-r--r-- | lisp/ob-haskell.el | 28 | ||||
-rw-r--r-- | lisp/ob-latex.el | 10 | ||||
-rw-r--r-- | lisp/ob-matlab.el | 37 | ||||
-rw-r--r-- | lisp/ob-ocaml.el | 11 | ||||
-rw-r--r-- | lisp/ob-octave.el | 102 | ||||
-rw-r--r-- | lisp/ob-perl.el | 13 | ||||
-rw-r--r-- | lisp/ob-python.el | 15 | ||||
-rw-r--r-- | lisp/ob-ruby.el | 17 | ||||
-rw-r--r-- | lisp/ob-sass.el | 1 | ||||
-rw-r--r-- | lisp/ob-screen.el | 29 | ||||
-rw-r--r-- | lisp/ob-sh.el | 1 | ||||
-rw-r--r-- | lisp/ob-sql.el | 6 | ||||
-rw-r--r-- | lisp/ob-sqlite.el | 4 | ||||
-rw-r--r-- | lisp/ob.el | 6 | ||||
-rw-r--r-- | lisp/org.el | 3 |
22 files changed, 241 insertions, 126 deletions
diff --git a/lisp/ob-C.el b/lisp/ob-C.el index 8930fa1..49e8277 100644 --- a/lisp/ob-C.el +++ b/lisp/ob-C.el @@ -35,7 +35,8 @@ (require 'org) (require 'cc-mode) -(declare-function org-entry-get "org" (&optional inherit)) +(declare-function org-entry-get "org" + (pom property &optional inherit literal-nil)) (add-to-list 'org-babel-tangle-lang-exts '("c++" . "cpp")) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 6a711e8..06bc26e 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -28,6 +28,17 @@ ;;; Code: (require 'ob) +(require 'ob-ref) +(eval-when-compile (require 'cl)) + +(declare-function org-babel-comint-in-buffer "ob-comint" (buffer &rest body)) +(declare-function comint-send-input "ob-comint" (el'.)) +(declare-function org-babel-comint-wait-for-output "ob-comint" (buffer)) +(declare-function org-babel-comint-buffer-livep "ob-comint" (buffer)) +(declare-function org-babel-comint-with-output "ob-comint" (meta &rest body)) +(declare-function orgtbl-to-tsv "ob-table" (table params)) +(declare-function R "essd-r" (&optional start-args)) +(declare-function inferior-ess-send-input "ess-inf" ()) (defconst org-babel-header-arg-names:R '(width height bg units pointsize antialias quality compression @@ -171,6 +182,8 @@ called by `org-babel-execute-src-block'." (defvar org-babel-R-wrapper-method "main <- function ()\n{\n%s\n} write.table(main(), file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=%s, col.names=%s, quote=FALSE)") +(defvar inferior-ess-primary-prompt) +(defvar inferior-ess-secondary-prompt) (defun org-babel-R-evaluate (session body result-type column-names-p row-names-p) "Pass BODY to the R process in SESSION. If RESULT-TYPE equals 'output then return a list of the outputs of the statements in diff --git a/lisp/ob-asymptote.el b/lisp/ob-asymptote.el index 1415730..da11fe4 100644 --- a/lisp/ob-asymptote.el +++ b/lisp/ob-asymptote.el @@ -46,6 +46,9 @@ (require 'ob) (eval-when-compile (require 'cl)) +(declare-function orgtbl-to-generic "org-table" (table params)) +(declare-function org-combine-plists "org" (&rest plists)) + (add-to-list 'org-babel-tangle-lang-exts '("asymptote" . "asy")) (defvar org-babel-default-header-args:asymptote diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el index 491a4ac..d308b58 100644 --- a/lisp/ob-clojure.el +++ b/lisp/ob-clojure.el @@ -39,9 +39,16 @@ ;;; Code: (require 'ob) -(require 'cl) -(require 'slime) -(require 'swank-clojure) +(eval-when-compile + (require 'cl)) + +(declare-function slime-eval-async "slime" (sexp &optional cont package)) +(declare-function slime-eval "slime" (sexp &optional package)) +(declare-function swank-clojure-concat-paths "slime" (paths)) +(declare-function org-babel-ref-variables "slime" (params)) +(declare-function slime "slime" (&optional command coding-system)) +(declare-function slime-output-buffer "slime" (&optional noprompt)) +(declare-function slime-filter-buffers "slime" (predicate)) (add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj")) @@ -76,6 +83,12 @@ (slime-eval `(swank:eval-and-grab-output ,string))) ;;taken from swank-clojure.el +(defvar swank-clojure-binary) +(defvar swank-clojure-classpath) +(defvar swank-clojure-java-path) +(defvar swank-clojure-extra-vm-args) +(defvar swank-clojure-library-paths) +(defvar swank-clojure-extra-classpaths) (defun org-babel-clojure-babel-clojure-cmd () "Create the command to start clojure according to current settings." (if (and (not swank-clojure-binary) (not swank-clojure-classpath)) @@ -84,8 +97,8 @@ (if (listp swank-clojure-binary) swank-clojure-binary (list swank-clojure-binary)) - (delete-if - 'null + (delq + nil (append (list swank-clojure-java-path) swank-clojure-extra-vm-args @@ -132,6 +145,7 @@ specifying a var of the same value." (defun org-babel-prep-session:clojure (session params) "Prepare SESSION according to the header arguments specified in PARAMS." + (require 'slime) (require 'swank-clojure) (let* ((session-buf (org-babel-clojure-initiate-session session)) (vars (org-babel-ref-variables params)) (var-lines (mapcar ;; define any top level session variables @@ -143,6 +157,7 @@ specifying a var of the same value." (defun org-babel-load-session:clojure (session body params) "Load BODY into SESSION." + (require 'slime) (require 'swank-clojure) (save-window-excursion (let ((buffer (org-babel-prep-session:clojure session params))) (with-current-buffer buffer @@ -188,6 +203,7 @@ then create one. Return the initialized session." (defun org-babel-clojure-initiate-session (&optional session params) "Return the slime-clojure repl buffer bound to this session or nil if \"none\" is specified." + (require 'slime) (require 'swank-clojure) (unless (and (stringp session) (string= session "none")) (org-babel-clojure-session-buffer (org-babel-clojure-initiate-session-by-key session)))) @@ -254,16 +270,18 @@ repl buffer." (set-buffer buffer) (setq raw (org-babel-clojure-slime-eval-sync body)) (setq results (reverse (mapcar #'org-babel-trim raw))) - (case result-type - (output (mapconcat #'identity (reverse (cdr results)) "\n")) - (value (org-babel-clojure-table-or-string (car results))))))) + (cond + ((equal result-type 'output) + (mapconcat #'identity (reverse (cdr results)) "\n")) + ((equal result-type 'value) + (org-babel-clojure-table-or-string (car results))))))) (defun org-babel-clojure-evaluate (buffer body &optional result-type) "Pass BODY to the Clojure process in BUFFER. If RESULT-TYPE equals 'output then return a list of the outputs of the statements in BODY, if RESULT-TYPE equals 'value then return the value of the last statement in BODY, as elisp." - (if session + (if buffer (org-babel-clojure-evaluate-session buffer body result-type) (org-babel-clojure-evaluate-external-process buffer body result-type))) @@ -274,6 +292,7 @@ last statement in BODY, as elisp." (defun org-babel-execute:clojure (body params) "Execute a block of Clojure code with org-babel." + (require 'slime) (require 'swank-clojure) (let* ((processed-params (org-babel-process-params params)) (body (org-babel-expand-body:clojure body params processed-params)) (session (org-babel-clojure-initiate-session (first processed-params)))) diff --git a/lisp/ob-comint.el b/lisp/ob-comint.el index b60e8f1..2a2f86c 100644 --- a/lisp/ob-comint.el +++ b/lisp/ob-comint.el @@ -33,6 +33,7 @@ ;;; Code: (require 'ob) (require 'comint) +(eval-when-compile (require 'cl)) (defun org-babel-comint-buffer-livep (buffer) "Check if BUFFER is a comint buffer with a live process." @@ -68,7 +69,7 @@ or user `keyboard-quit' during execution of body." (remove-echo (cadr (cdr meta))) (full-body (cadr (cdr (cdr meta))))) `(org-babel-comint-in-buffer ,buffer - (let ((string-buffer "") dangling-text) + (let ((string-buffer "") dangling-text raw) (flet ((my-filt (text) (setq string-buffer (concat string-buffer text)))) ;; setup filter diff --git a/lisp/ob-ditaa.el b/lisp/ob-ditaa.el index 6d0a584..1d70b5a 100644 --- a/lisp/ob-ditaa.el +++ b/lisp/ob-ditaa.el @@ -46,6 +46,7 @@ (defun org-babel-expand-body:ditaa (body params &optional processed-params) "Expand BODY according to PARAMS, return the expanded body." body) +(defvar org-ditaa-jar-path) (defun org-babel-execute:ditaa (body params) "Execute a block of Ditaa code with org-babel. This function is called by `org-babel-execute-src-block'." diff --git a/lisp/ob-gnuplot.el b/lisp/ob-gnuplot.el index 5060d66..36ffbe1 100644 --- a/lisp/ob-gnuplot.el +++ b/lisp/ob-gnuplot.el @@ -40,7 +40,16 @@ ;;; Code: (require 'ob) -(require 'gnuplot) +(require 'ob-ref) +(require 'ob-comint) +(eval-when-compile (require 'cl)) + +(declare-function org-time-string-to-time "org" (s)) +(declare-function org-combine-plists "org" (&rest plists)) +(declare-function orgtbl-to-generic "org-table" (table params)) +(declare-function gnuplot-mode "gnuplot-mode" ()) +(declare-function gnuplot-send-string-to-gnuplot "gnuplot-mode" (string text)) +(declare-function gnuplot-send-buffer-to-gnuplot "gnuplot-mode" ()) (defvar org-babel-default-header-args:gnuplot '((:results . "file") (:exports . "results") (:session . nil)) @@ -124,10 +133,12 @@ code." "Execute a block of Gnuplot code with org-babel. This function is called by `org-babel-execute-src-block'." (message "executing Gnuplot source code block") + (require 'gnuplot) (let ((session (cdr (assoc :session params))) (result-type (cdr (assoc :results params))) (out-file (cdr (assoc :file params))) - (body (org-babel-expand-body:gnuplot body params))) + (body (org-babel-expand-body:gnuplot body params)) + output) (save-window-excursion ;; evaluate the code body with gnuplot (if (string= session "none") @@ -170,18 +181,23 @@ called by `org-babel-execute-src-block'." (insert (org-babel-chomp body))) buffer))) +(defvar gnuplot-buffer) (defun org-babel-gnuplot-initiate-session (&optional session params) "If there is not a current inferior-process-buffer in SESSION then create one. Return the initialized session. The current `gnuplot-mode' doesn't provide support for multiple sessions." + (require 'gnuplot) (unless (string= session "none") - (save-window-excursion (gnuplot-send-string-to-gnuplot "" "line") - gnuplot-buffer))) + (save-window-excursion + (gnuplot-send-string-to-gnuplot "" "line") + gnuplot-buffer))) (defun org-babel-gnuplot-quote-timestamp-field (s) "Convert field S from timestamp to Unix time and export to gnuplot." (format-time-string org-babel-gnuplot-timestamp-fmt (org-time-string-to-time s))) +(defvar org-table-number-regexp) +(defvar org-ts-regexp3) (defun org-babel-gnuplot-quote-tsv-field (s) "Quote field S for export to gnuplot." (unless (stringp s) diff --git a/lisp/ob-haskell.el b/lisp/ob-haskell.el index df3b72a..c380f1b 100644 --- a/lisp/ob-haskell.el +++ b/lisp/ob-haskell.el @@ -41,8 +41,15 @@ ;;; Code: (require 'ob) -(require 'haskell-mode) -(require 'inf-haskell) +(require 'ob-comint) +(require 'comint) +(eval-when-compile (require 'cl)) + +(declare-function org-remove-indentation "org" (code &optional n)) +(declare-function haskell-mode "ext:haskell-mode" ()) +(declare-function run-haskell "ext:inf-haskell" (&optional arg)) +(declare-function inferior-haskell-load-file + "ext:inf-haskell" (&optional reload)) (add-to-list 'org-babel-tangle-lang-exts '("haskell" . "hs")) @@ -66,7 +73,7 @@ "Execute a block of Haskell code with org-babel." (message "executing haskell source code block") (let* ((processed-params (org-babel-process-params params)) - (session (first processed-params)) + (session (nth 0 processed-params)) (vars (nth 1 processed-params)) (result-type (nth 3 processed-params)) (full-body (org-babel-expand-body:haskell body params processed-params)) @@ -82,9 +89,11 @@ (cdr (member org-babel-haskell-eoe (reverse (mapcar #'org-babel-trim raw))))))) (org-babel-reassemble-table - (case result-type - (output (mapconcat #'identity (reverse (cdr results)) "\n")) - (value (org-babel-haskell-table-or-string (car results)))) + (cond + ((equal result-type 'output) + (mapconcat #'identity (reverse (cdr results)) "\n")) + ((equal result-type 'value) + (org-babel-haskell-table-or-string (car results)))) (org-babel-pick-name (nth 4 processed-params) (cdr (assoc :colnames params))) (org-babel-pick-name (nth 5 processed-params) (cdr (assoc :rownames params)))))) @@ -97,7 +106,7 @@ (defun org-babel-haskell-initiate-session (&optional session params) "If there is not a current inferior-process-buffer in SESSION then create one. Return the initialized session." - ;; TODO: make it possible to have multiple sessions + (require 'inf-haskell) (or (get-buffer "*haskell*") (save-window-excursion (run-haskell) (sleep-for 0.25) (current-buffer)))) @@ -114,13 +123,13 @@ then create one. Return the initialized session." buffer))) (defun org-babel-prep-session:haskell - (session params &optional processesed-params) + (session params &optional processed-params) "Prepare SESSION according to the header arguments specified in PARAMS." (save-window-excursion (let ((pp (or processed-params (org-babel-process-params params))) (buffer (org-babel-haskell-initiate-session session))) (org-babel-comint-in-buffer buffer - (mapcar + (mapc (lambda (pair) (insert (format "let %s = %s" (car pair) @@ -150,6 +159,7 @@ specifying a var of the same value." (concat "[" (mapconcat #'org-babel-haskell-var-to-haskell var ", ") "]") (format "%S" var))) +(defvar org-src-preserve-indentation) (defun org-babel-haskell-export-to-lhs (&optional arg) "Export to a .lhs file with all haskell code blocks escaped appropriately. When called with a prefix argument the resulting diff --git a/lisp/ob-latex.el b/lisp/ob-latex.el index 3c7b7cf..6b817ae 100644 --- a/lisp/ob-latex.el +++ b/lisp/ob-latex.el @@ -32,6 +32,7 @@ ;;; Code: (require 'ob) +(require 'org-latex) (add-to-list 'org-babel-tangle-lang-exts '("latex" . "tex")) @@ -85,9 +86,12 @@ called by `org-babel-execute-src-block'." (with-temp-file tex-file (insert (org-splice-latex-header org-format-latex-header - (remove-if - (lambda (el) (and (listp el) (string= "hyperref" (cadr el)))) - org-export-latex-default-packages-alist) + (delq + nil + (mapcar + (lambda (el) (unless (and (listp el) (string= "hyperref" (cadr el))) + el)) + org-export-latex-default-packages-alist)) org-export-latex-packages-alist org-format-latex-header-extra) (if height (concat "\n" (format "\\pdfpageheight %s" height)) "") diff --git a/lisp/ob-matlab.el b/lisp/ob-matlab.el index 63858bc..7481131 100644 --- a/lisp/ob-matlab.el +++ b/lisp/ob-matlab.el @@ -36,43 +36,10 @@ ;; http://matlab-emacs.sourceforge.net/ ;;; Code: -(require 'matlab) +(require 'ob) (require 'ob-octave) -(defvar org-babel-default-header-args:matlab '()) - -(defvar org-babel-matlab-shell-command "matlab -nosplash" - "Shell command to use to run matlab as an external process.") - -(defun org-babel-expand-body:matlab (body params &optional processed-params) - "Expand BODY according to PARAMS, return the expanded body." body) - -(defvar org-babel-matlab-with-emacs-link nil - "If non-nil use matlab-shell-run-region for session - evaluation. This will use EmacsLink if (matlab-with-emacs-link) - evaluates to a non-nil value.") - -(defvar org-babel-matlab-emacs-link-wrapper-method - "%s -if ischar(ans), fid = fopen('%s', 'w'); fprintf(fid, '%%s\\n', ans); fclose(fid); -else, save -ascii %s ans -end -delete('%s') -") - -(defun org-babel-execute:matlab (body params) - "Execute a block of matlab code with org-babel." - (org-babel-execute:octave body params 'matlab)) - -(defun org-babel-prep-session:matlab (session params) - "Prepare SESSION according to PARAMS." - (org-babel-prep-session:octave session params 'matlab)) - -(defun org-babel-matlab-initiate-session (&optional session params) - "Create a matlab inferior process buffer. If there is not a -current inferior-process-buffer in SESSION then create. Return -the initialized session." - (org-babel-octave-initiate-session session params 'matlab)) +;; see ob-octave for matlab implementation (provide 'ob-matlab) diff --git a/lisp/ob-ocaml.el b/lisp/ob-ocaml.el index 66d285b..f6cbd65 100644 --- a/lisp/ob-ocaml.el +++ b/lisp/ob-ocaml.el @@ -37,7 +37,11 @@ ;;; Code: (require 'ob) -(require 'tuareg) +(require 'ob-comint) +(require 'comint) +(eval-when-compile (require 'cl)) + +(declare-function tuareg-run-caml "taureg" ()) (add-to-list 'org-babel-tangle-lang-exts '("ocaml" . "ml")) @@ -60,7 +64,8 @@ (let* ((processed-params (org-babel-process-params params)) (vars (nth 1 processed-params)) (full-body (org-babel-expand-body:ocaml body params processed-params)) - (session (org-babel-prep-session:ocaml session params)) + (session (org-babel-prep-session:ocaml + (cdr (assoc :session params)) params)) (raw (org-babel-comint-with-output (session org-babel-ocaml-eoe-output t full-body) (insert (concat (org-babel-chomp full-body) " ;;")) @@ -72,8 +77,10 @@ (org-babel-pick-name (nth 4 processed-params) (cdr (assoc :colnames params))) (org-babel-pick-name (nth 5 processed-params) (cdr (assoc :rownames params)))))) +(defvar tuareg-interactive-buffer-name) (defun org-babel-prep-session:ocaml (session params) "Prepare SESSION according to the header arguments specified in PARAMS." + (require 'tuareg) (let ((tuareg-interactive-buffer-name (if (and (not (string= session "none")) (not (string= session "default")) (stringp session)) diff --git a/lisp/ob-octave.el b/lisp/ob-octave.el index 8797b23..8b2a076 100644 --- a/lisp/ob-octave.el +++ b/lisp/ob-octave.el @@ -31,13 +31,23 @@ ;;; Code: (require 'ob) -(require 'octave-inf) +(require 'ob-ref) +(require 'ob-comint) +(eval-when-compile (require 'cl)) +(declare-function matlab-shell "matlab-mode") +(declare-function matlab-shell-run-region "matlab-mode") + +(defvar org-babel-default-header-args:matlab '()) (defvar org-babel-default-header-args:octave '()) +(defvar org-babel-matlab-shell-command "matlab -nosplash" + "Shell command to use to run matlab as an external process.") (defvar org-babel-octave-shell-command "octave -q" "Shell command to use to run octave as an external process.") +(defun org-babel-expand-body:matlab (body params &optional processed-params) + "Expand BODY according to PARAMS, return the expanded body." body) (defun org-babel-expand-body:octave (body params &optional processed-params) "Expand BODY according to PARAMS, return the expanded body." (let ((vars (nth 1 (or processed-params (org-babel-process-params params))))) @@ -51,13 +61,32 @@ (org-babel-octave-var-to-octave (cdr pair)))) vars "\n") "\n" body "\n"))) +(defvar org-babel-matlab-with-emacs-link nil + "If non-nil use matlab-shell-run-region for session + evaluation. This will use EmacsLink if (matlab-with-emacs-link) + evaluates to a non-nil value.") + +(defvar org-babel-matlab-emacs-link-wrapper-method + "%s +if ischar(ans), fid = fopen('%s', 'w'); fprintf(fid, '%%s\\n', ans); fclose(fid); +else, save -ascii %s ans +end +delete('%s') +") + +(defun org-babel-execute:matlab (body params) + "Execute a block of matlab code with org-babel." + (require 'matlab) + (org-babel-execute:octave body params 'matlab)) (defun org-babel-execute:octave (body params &optional matlabp) "Execute a block of octave code with org-babel." (message (format "executing %s source code block" (if matlabp "matlab" "octave"))) (let* ((processed-params (org-babel-process-params params)) ;; set the session if the session variable is non-nil - (session (funcall (intern (format "org-babel-%s-initiate-session" lang)) - (first processed-params) params)) + (session + (funcall (intern (format "org-babel-%s-initiate-session" + (if matlabp "matlab" "octave"))) + (nth 0 processed-params) params)) (vars (nth 1 processed-params)) (result-params (nth 2 processed-params)) (result-type (nth 3 processed-params)) @@ -70,6 +99,10 @@ (org-babel-pick-name (nth 4 processed-params) (cdr (assoc :colnames params))) (org-babel-pick-name (nth 5 processed-params) (cdr (assoc :rownames params))))))) +(defun org-babel-prep-session:matlab (session params) + "Prepare SESSION according to PARAMS." + (require 'matlab) + (org-babel-prep-session:octave session params 'matlab)) (defun org-babel-octave-var-to-octave (var) "Convert an emacs-lisp variable into an octave variable. Converts an emacs-lisp variable into a string of octave code @@ -94,10 +127,17 @@ specifying a variable of the same value." (org-babel-comint-wait-for-output session)) var-lines)) session)) +(defun org-babel-matlab-initiate-session (&optional session params) + "Create a matlab inferior process buffer. If there is not a +current inferior-process-buffer in SESSION then create. Return +the initialized session." + (require 'matlab) + (org-babel-octave-initiate-session session params 'matlab)) (defun org-babel-octave-initiate-session (&optional session params matlabp) "Create an octave inferior process buffer. If there is not a current inferior-process-buffer in SESSION then create. Return the initialized session." + (require 'octave-inf) (unless (string= session "none") (let ((session (or session (if matlabp "*Inferior Matlab*" "*Inferior Octave*")))) (if (org-babel-comint-buffer-livep session) session @@ -117,7 +157,8 @@ end") (defvar org-babel-octave-eoe-output "ans = org_babel_eoe") -(defun org-babel-octave-evaluate (session body result-type lang) +(defun org-babel-octave-evaluate + (session body result-type lang &optional matlabp) "Pass BODY to the octave process in SESSION. If RESULT-TYPE equals 'output then return the outputs of the statements in BODY, if RESULT-TYPE equals 'value then return the value of the last @@ -130,24 +171,25 @@ statement in BODY, as elisp." "Evaluate BODY in an external octave process." (let ((cmd (if matlabp org-babel-matlab-shell-command org-babel-octave-shell-command))) (save-excursion - (case result-type - (output - (with-temp-buffer - (insert body) - (org-babel-shell-command-on-region (point-min) (point-max) cmd 'current-buffer 'replace) - (buffer-string))) - (value - (let* ((tmp-file (make-temp-file "org-babel-results-")) exit-code - (stderr - (with-temp-buffer - (insert (format org-babel-octave-wrapper-method body tmp-file tmp-file)) - (setq exit-code (org-babel-shell-command-on-region - (point-min) (point-max) cmd nil 'replace (current-buffer))) - (buffer-string)))) - (if (> exit-code 0) (org-babel-error-notify exit-code stderr)) - (org-babel-octave-import-elisp-from-file (org-babel-maybe-remote-file tmp-file)))))))) - -(defun org-babel-octave-evaluate-session (session body result-type &optional matlabp) + (cond + ((equal result-type 'output) + (with-temp-buffer + (insert body) + (org-babel-shell-command-on-region (point-min) (point-max) cmd 'current-buffer 'replace) + (buffer-string))) + ((equal result-type 'value) + (let* ((tmp-file (make-temp-file "org-babel-results-")) exit-code + (stderr + (with-temp-buffer + (insert (format org-babel-octave-wrapper-method body tmp-file tmp-file)) + (setq exit-code (org-babel-shell-command-on-region + (point-min) (point-max) cmd nil 'replace (current-buffer))) + (buffer-string)))) + (if (> exit-code 0) (org-babel-error-notify exit-code stderr)) + (org-babel-octave-import-elisp-from-file (org-babel-maybe-remote-file tmp-file)))))))) + +(defun org-babel-octave-evaluate-session + (session body result-type &optional matlabp) "Evaluate BODY in SESSION." (let* ((tmp-file (make-temp-file "org-babel-results-")) (wait-file (make-temp-file "org-babel-matlab-emacs-link-wait-signal-")) @@ -164,7 +206,8 @@ statement in BODY, as elisp." body tmp-file tmp-file wait-file) "\n") (mapconcat #'org-babel-chomp - (list (format org-babel-octave-wrapper-method body tmp-file tmp-file) + (list (format org-babel-octave-wrapper-method + body tmp-file tmp-file) org-babel-octave-eoe-indicator) "\n"))))) (raw (if (and matlabp org-babel-matlab-with-emacs-link) (save-window-excursion @@ -187,16 +230,19 @@ statement in BODY, as elisp." (insert full-body) (comint-send-input nil t)))) results) (case result-type (value - (org-babel-octave-import-elisp-from-file (org-babel-maybe-remote-file tmp-file))) + (org-babel-octave-import-elisp-from-file + (org-babel-maybe-remote-file tmp-file))) (output (progn (setq results (if matlabp - (cdr (reverse (delq "" (mapcar #'org-babel-octave-read-string - (mapcar #'org-babel-trim raw))))) + (cdr (reverse (delq "" (mapcar + #'org-babel-octave-read-string + (mapcar #'org-babel-trim raw))))) (cdr (member org-babel-octave-eoe-output - (reverse (mapcar #'org-babel-octave-read-string - (mapcar #'org-babel-trim raw))))))) + (reverse (mapcar + #'org-babel-octave-read-string + (mapcar #'org-babel-trim raw))))))) (mapconcat #'identity (reverse results) "\n")))))) (defun org-babel-octave-import-elisp-from-file (file-name) diff --git a/lisp/ob-perl.el b/lisp/ob-perl.el index f34a88c..c6a13c1 100644 --- a/lisp/ob-perl.el +++ b/lisp/ob-perl.el @@ -49,7 +49,7 @@ called by `org-babel-execute-src-block'." (message "executing Perl source code block") (let* ((processed-params (org-babel-process-params params)) - (session (first processed-params)) + (session (nth 0 processed-params)) (vars (nth 1 processed-params)) (result-params (nth 2 processed-params)) (result-type (nth 3 processed-params)) @@ -100,22 +100,19 @@ last statement in BODY, as elisp." (if (not session) ;; external process evaluation (save-excursion - (case result-type - (output + (cond + ((equal result-type 'output) (with-temp-buffer (insert body) ;; (message "buffer=%s" (buffer-string)) ;; debugging (org-babel-shell-command-on-region (point-min) (point-max) "perl" 'current-buffer 'replace) (buffer-string))) - (value + ((equal result-type 'value) (let* ((tmp-file (make-temp-file "perl-functional-results")) exit-code (stderr (with-temp-buffer (insert - (format - (if (member "pp" result-params) - (error "Pretty-printing not implemented for perl") - org-babel-perl-wrapper-method) body tmp-file)) + (format org-babel-perl-wrapper-method body tmp-file)) (setq exit-code (org-babel-shell-command-on-region (point-min) (point-max) "perl" nil 'replace (current-buffer))) diff --git a/lisp/ob-python.el b/lisp/ob-python.el index 15857b7..865213e 100644 --- a/lisp/ob-python.el +++ b/lisp/ob-python.el @@ -28,9 +28,12 @@ ;;; Code: (require 'ob) -(require 'ob-tangle) +(require 'ob-ref) (require 'ob-comint) (require (if (featurep 'xemacs) 'python-mode 'python)) +(eval-when-compile (require 'cl)) + +(declare-function org-remove-indentation "org" ) (add-to-list 'org-babel-tangle-lang-exts '("python" . "py")) @@ -57,7 +60,8 @@ called by `org-babel-execute-src-block'." (result-type (nth 3 processed-params)) (full-body (org-babel-expand-body:python body params processed-params)) ;; then the source block body - (result (org-babel-python-evaluate session full-body result-type))) + (result (org-babel-python-evaluate + session full-body result-type result-params))) (or (cdr (assoc :file params)) (org-babel-reassemble-table result @@ -177,12 +181,13 @@ def main(): open('%s', 'w').write( pprint.pformat(main()) )") -(defun org-babel-python-evaluate (buffer body &optional result-type) +(defun org-babel-python-evaluate + (buffer body &optional result-type result-params) "Pass BODY to the Python process in BUFFER. If RESULT-TYPE equals 'output then return a list of the outputs of the statements in BODY, if RESULT-TYPE equals 'value then return the value of the last statement in BODY, as elisp." - (if (not session) + (if (not buffer) ;; external process evaluation (save-excursion (case result-type @@ -220,7 +225,7 @@ last statement in BODY, as elisp." ;; comint session evaluation (org-babel-comint-in-buffer buffer (let* ((raw (org-babel-comint-with-output - (buffer org-babel-python-eoe-indicator t full-body) + (buffer org-babel-python-eoe-indicator t body) ;; for some reason python is fussy, and likes enters after every input (let ((comint-process-echoes nil)) (mapc (lambda (statement) (insert statement) (comint-send-input)) diff --git a/lisp/ob-ruby.el b/lisp/ob-ruby.el index d525bbe..905c132 100644 --- a/lisp/ob-ruby.el +++ b/lisp/ob-ruby.el @@ -38,7 +38,12 @@ ;;; Code: (require 'ob) -(require 'inf-ruby) +(require 'ob-ref) +(require 'ob-comint) +(eval-when-compile + (require 'cl)) + +(declare-function run-ruby "inf-ruby" (&optional command name)) (add-to-list 'org-babel-tangle-lang-exts '("ruby" . "rb")) @@ -46,6 +51,7 @@ (defun org-babel-expand-body:ruby (body params &optional processed-params) "Expand BODY according to PARAMS, return the expanded body." + (require 'inf-ruby) (let ((vars (nth 1 (or processed-params (org-babel-process-params params))))) (concat (mapconcat ;; define any variables @@ -65,7 +71,8 @@ called by `org-babel-execute-src-block'." (result-type (nth 3 processed-params)) (full-body (org-babel-expand-body:ruby body params processed-params)) - (result (org-babel-ruby-evaluate session full-body result-type))) + (result (org-babel-ruby-evaluate + session full-body result-type result-params))) (or (cdr (assoc :file params)) (org-babel-reassemble-table result @@ -129,6 +136,7 @@ Emacs-lisp table, otherwise return the results as a string." (defun org-babel-ruby-initiate-session (&optional session params) "If there is not a current inferior-process-buffer in SESSION then create one. Return the initialized session." + (require 'inf-ruby) (unless (string= session "none") (let ((session-buffer (save-window-excursion (run-ruby nil session) (current-buffer)))) @@ -164,12 +172,13 @@ File.open('%s', 'w') do |f| end ") -(defun org-babel-ruby-evaluate (buffer body &optional result-type) +(defun org-babel-ruby-evaluate + (buffer body &optional result-type result-params) "Pass BODY to the Ruby process in BUFFER. If RESULT-TYPE equals 'output then return a list of the outputs of the statements in BODY, if RESULT-TYPE equals 'value then return the value of the last statement in BODY, as elisp." - (if (not session) + (if (not buffer) ;; external process evaluation (save-excursion (case result-type diff --git a/lisp/ob-sass.el b/lisp/ob-sass.el index 7cf7015..e762d3d 100644 --- a/lisp/ob-sass.el +++ b/lisp/ob-sass.el @@ -40,7 +40,6 @@ ;;; Code: (require 'ob) -(require 'sass-mode) (defvar org-babel-default-header-args:sass '()) diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el index c784356..58425a7 100644 --- a/lisp/ob-screen.el +++ b/lisp/ob-screen.el @@ -35,6 +35,7 @@ ;;; Code: (require 'ob) +(require 'ob-ref) (defvar org-babel-screen-location "screen" "The command location for screen. @@ -53,7 +54,7 @@ In case you want to use a different screen than one selected by your $PATH") (message "Sending source code block to interactive terminal session...") (save-window-excursion (let* ((processed-params (org-babel-process-params params)) - (session (first processed-params)) + (session (nth 0 processed-params)) (socket (org-babel-screen-session-socketname session))) (unless socket (org-babel-prep-session:screen session params)) (org-babel-screen-session-execute-string @@ -62,7 +63,7 @@ In case you want to use a different screen than one selected by your $PATH") (defun org-babel-prep-session:screen (session params) "Prepare SESSION according to the header arguments specified in PARAMS." (let* ((processed-params (org-babel-process-params params)) - (session (first processed-params)) + (session (nth 0 processed-params)) (vars (nth 1 processed-params)) (socket (org-babel-screen-session-socketname session)) (vars (org-babel-ref-variables params)) @@ -94,14 +95,22 @@ In case you want to use a different screen than one selected by your $PATH") (defun org-babel-screen-session-socketname (session) "Check if SESSION exist by parsing output of \"screen -ls\"." (let* ((screen-ls (shell-command-to-string "screen -ls")) - (sockets (remove-if-not - '(lambda (x) - (string-match (rx (or "(Attached)" "(Detached)")) x)) - (split-string screen-ls "\n"))) - (match-socket (find-if - '(lambda (x) - (string-match (concat "org-babel-session-" session) x)) - sockets))) + (sockets (delq + nil + (mapcar + (lambda (x) + (when (string-match (rx (or "(Attached)" "(Detached)")) x) + x)) + (split-string screen-ls "\n")))) + (match-socket (car + (delq + nil + (mapcar + (lambda (x) + (when (string-match + (concat "org-babel-session-" session) x) + x)) + sockets))))) (when match-socket (car (split-string match-socket))))) (defun org-babel-screen-session-write-temp-file (session body) diff --git a/lisp/ob-sh.el b/lisp/ob-sh.el index 284164b..986cbc6 100644 --- a/lisp/ob-sh.el +++ b/lisp/ob-sh.el @@ -28,6 +28,7 @@ ;;; Code: (require 'ob) +(require 'ob-comint) (require 'shell) (eval-when-compile (require 'cl)) diff --git a/lisp/ob-sql.el b/lisp/ob-sql.el index 9429ce0..e42b6cb 100644 --- a/lisp/ob-sql.el +++ b/lisp/ob-sql.el @@ -44,6 +44,9 @@ ;;; Code: (require 'ob) +(eval-when-compile (require 'cl)) + +(declare-function org-table-import "org-table" (file arg)) (defvar org-babel-default-header-args:sql '()) @@ -55,6 +58,7 @@ called by `org-babel-execute-src-block'." (message "executing Sql source code block") (let* ((result-params (split-string (or (cdr (assoc :results params)) ""))) + (processed-params (org-babel-process-params params)) (cmdline (cdr (assoc :cmdline params))) (engine (cdr (assoc :engine params))) (in-file (make-temp-file "org-babel-sql-in")) @@ -63,7 +67,7 @@ called by `org-babel-execute-src-block'." (command (case (intern engine) ('mysql (format "mysql %s -e \"source %s\" > %s" (or cmdline "") in-file out-file)) - (t (error "no support for the %s sql engine"))))) + (t (error "no support for the %s sql engine" engine))))) (with-temp-file in-file (insert (org-babel-expand-body:sql body params))) (message command) diff --git a/lisp/ob-sqlite.el b/lisp/ob-sqlite.el index a8180fc..6267ed8 100644 --- a/lisp/ob-sqlite.el +++ b/lisp/ob-sqlite.el @@ -28,6 +28,10 @@ ;;; Code: (require 'ob) +(require 'ob-ref) + +(declare-function org-table-convert-region + "org-table" (beg0 end0 &optional separator)) (defvar org-babel-default-header-args:sqlite '()) @@ -62,7 +62,7 @@ (declare-function org-babel-ref-resolve-reference "ob-ref" (ref &optional params)) (defcustom org-confirm-babel-evaluate t - "Require confirmation before interactively evaluating code + "Require confirmation before interactively evaluating code blocks in Org-mode buffers. The default value of this variable is t, meaning confirmation is required for any code block evaluation. This variable can be set to nil to inhibit any @@ -78,8 +78,8 @@ remove code block execution from C-c C-c as further protection against accidental code block evaluation. The `org-babel-no-eval-on-ctrl-c-ctrl-c' variable can be used to remove code block execution from the C-c C-c keybinding." - :group 'org-babel - :type '(choice boolean function)) + :group 'org-babel + :type '(choice boolean function)) ;; don't allow this variable to be changed through file settings (put 'org-confirm-babel-evaluate 'safe-local-variable (lambda (x) (eq x t))) diff --git a/lisp/org.el b/lisp/org.el index 16e7039..99dbdc1 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -121,6 +121,7 @@ (require 'ob-keys) ;; load languages based on value of `org-babel-load-languages' +(defvar org-babel-load-languages) (defun org-babel-do-load-languages (sym value) "Load the languages defined in `org-babel-load-languages'." (set-default sym value) @@ -128,10 +129,8 @@ (let ((active (cdr pair)) (lang (symbol-name (car pair)))) (if active (progn - (message "Activating %s..." lang) (require (intern (concat "ob-" lang)))) (progn - (message "Disabling %s..." lang) (funcall 'fmakunbound (intern (concat "org-babel-execute:" lang))) (funcall 'fmakunbound |