In any case, can you please post a patch against the standard
version? Or, maybe easier, simply post ob-maxima.el as the other
changes are not necessary for me to test your patch.
I though my previous patch was applied. It is still under review due to
copyright papers. I am attaching a patch against master branch and
ob-maxima.el file.
The commit message is
ob-maxima.el: add input variables, png graphic
output, table as an output
From d9cfa76e83c10e86ffacca3da7cbc83702268cc2 Mon Sep 17 00:00:00 2001
From: Litvinov Sergey slitvi...@gmail.com
Date: Tue, 4 Oct 2011 19:48:14 +0200
Subject: [PATCH] ob-maxima.el: add input variables, graphic output to png file, table as an output
---
lisp/ob-maxima.el | 97 -
1 files changed, 73 insertions(+), 24 deletions(-)
diff --git a/lisp/ob-maxima.el b/lisp/ob-maxima.el
index 085609c..9c39a5f 100644
--- a/lisp/ob-maxima.el
+++ b/lisp/ob-maxima.el
@@ -30,47 +30,96 @@
;;
;; 1) there is no such thing as a session in maxima
;;
-;; 2) we are generally only going to return output from maxima
-;;
-;; 3) we are adding the cmdline header argument
-;;
-;; 4) there are no variables
+;; 2) we are adding the cmdline header argument
;;; Code:
(require 'ob)
+(defvar org-babel-tangle-lang-exts)
+(add-to-list 'org-babel-tangle-lang-exts '(maxima . max))
+
(defvar org-babel-default-header-args:maxima '())
(defun org-babel-maxima-expand (body params)
Expand a block of Maxima code according to its header arguments.
- body)
+ (let ((vars (mapcar #'cdr (org-babel-get-header params :var
+ (mapconcat 'identity
+ (list
+ ;; graphic output
+ (let ((graphic-file (org-babel-maxima-graphical-output-file params)))
+ (if graphic-file
+ (format
+ set_plot_option ([gnuplot_term, png]); set_plot_option ([gnuplot_out_file, %S]);
+ graphic-file)
+ ))
+ ;; variables
+ (mapconcat 'org-babel-maxima-var-to-maxima vars \n)
+ ;; body
+ body
+ gnuplot_close ()$)
+ \n)))
(defun org-babel-execute:maxima (body params)
Execute a block of Maxima entries with org-babel. This function is
called by `org-babel-execute-src-block'.
(message executing Maxima source code block)
- (let* ((result-params (split-string (or (cdr (assoc :results params)) )))
- (cmdline (cdr (assoc :cmdline params)))
- (in-file (org-babel-temp-file maxima-))
- (cmd (format maxima --very-quiet -r 'batchload(%S)$' %s
- in-file cmdline)))
-(with-temp-file in-file (insert body))
-(message cmd)
-((lambda (raw) ;; | grep -v batch | grep -v 'replaced' | sed '/^$/d'
- (mapconcat
- #'identity
- (delq nil
- (mapcar (lambda (line)
- (unless (or (string-match batch line)
-(string-match ^rat: replaced .*$ line)
-(= 0 (length line)))
- line))
- (split-string raw [\r\n]))) \n))
- (org-babel-eval cmd
+ (let ((result
+ (let* ((result-params (split-string (or (cdr (assoc :results params)) )))
+ (cmdline (cdr (assoc :cmdline params)))
+ (in-file (org-babel-temp-file maxima- .max))
+ (cmd (format maxima --very-quiet -r 'batchload(%S)$' %s
+ in-file cmdline)))
+ (with-temp-file in-file (insert (org-babel-maxima-expand body params)))
+ (message cmd)
+ ((lambda (raw) ;; | grep -v batch | grep -v 'replaced' | sed '/^$/d'
+ (mapconcat
+ #'identity
+ (delq nil
+ (mapcar (lambda (line)
+ (unless (or (string-match batch line)
+ (string-match ^rat: replaced .*$ line)
+ (= 0 (length line)))
+ line))
+ (split-string raw [\r\n]))) \n))
+ (org-babel-eval cmd )
+(if (org-babel-maxima-graphical-output-file params)
+ nil
+ (if (or (member scalar result-params)
+ (member verbatim result-params)
+ (member output result-params))
+ result
+ (let ((tmp-file (org-babel-temp-file maxima-res-)))
+ (with-temp-file tmp-file (insert result))
+ (org-babel-import-elisp-from-file tmp-file))
+
(defun org-babel-prep-session:maxima (session params)
(error Maxima does not support sessions))
+(defun org-babel-maxima-var-to-maxima (pair)
+ Convert an elisp val into a string of maxima code specifying a var
+of the same value.
+ (let ((var (car pair))
+(val (cdr pair)))
+(when (symbolp val)
+ (setq val (symbol-name val))
+ (when (= (length val) 1)
+(setq val (string-to-char val
+ (format %S: %s$ var
+ (org-babel-maxima-elisp-to-maxima val
+
+(defun org-babel-maxima-graphical-output-file (params)
+ Name of file to which maxima should send graphical output.
+ (and (member graphics (cdr (assq :result-params params)))
+ (cdr (assq :file params
+
+(defun org-babel-maxima-elisp-to-maxima (val)
+ Return a string of maxima code which evaluates to VAL.
+ (if (listp val)
+ (concat [ (mapconcat #'org-babel-maxima-elisp-to-maxima val , ) ])
+(format %s val)))
+
+
(provide 'ob-maxima)
--
1.7.4.1