From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [babel] maxima support? Date: Tue, 15 Mar 2011 07:17:51 -0600 Message-ID: <87r5a834lc.fsf@gmail.com> References: <5rbp23p04b.fsf@kana.aer.mw.tum.de> <87bp21ohkt.fsf@pinto.chemeng.ucl.ac.uk> <8762s7ipr7.fsf@gmail.com> <87y6503zkk.fsf@ucl.ac.uk> <874o75wfzf.fsf@gmail.com> <871v28slsr.fsf@ucl.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from [140.186.70.92] (port=37023 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PzU8O-0007ZW-U8 for emacs-orgmode@gnu.org; Tue, 15 Mar 2011 09:18:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PzU8M-0006J4-BN for emacs-orgmode@gnu.org; Tue, 15 Mar 2011 09:18:00 -0400 Received: from mail-pz0-f41.google.com ([209.85.210.41]:33672) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PzU8M-0006Iq-3X for emacs-orgmode@gnu.org; Tue, 15 Mar 2011 09:17:58 -0400 Received: by pzk32 with SMTP id 32so141791pzk.0 for ; Tue, 15 Mar 2011 06:17:57 -0700 (PDT) In-Reply-To: <871v28slsr.fsf@ucl.ac.uk> (Eric S. Fraga's message of "Tue, 15 Mar 2011 10:47:00 +0000") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Eric S Fraga Cc: Litvinov Sergey , emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Eric S Fraga writes: > "Eric Schulte" writes: > >> Hi Eric, >> >> I've gone through your ob-maxima.el, and tried to re-work it to the >> point where it can be included into Org-mode -- mainly just switching to >> a couple of Babel "best practices", and replacing some shell script >> munging with elisp munging. >> >> Please try out the attached version (packaged as a patch against the >> current Org-mode head) and let me know if it works --- i.e., If I >> haven't broken it too badly. If it works I think we can fold it into >> Org-mode immediately. >> >> Cheers -- Eric > > I've tried this but cannot get it to execute my maxima code: > > #+begin_src maxima > programmode: false; > eq: x**2-1 = 0; > solution: solve(eq, x); > print(solution); > #+end_src > > I get the following error: > Ah, I see the problem, I used let instead of let*. Please try this updated version of the patch. Sorry I would test this myself, but I don't have Maxima installed. Thanks -- Eric --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-adding-support-for-Maxima-code-blocks-thanks-to-Eric.patch >From 69c60518f17ac1d59864cbb42717733da74cb024 Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Mon, 14 Mar 2011 15:20:05 -0600 Subject: [PATCH] adding support for Maxima code blocks -- thanks to Eric Fraga --- lisp/ob-maxima.el | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ lisp/org.el | 1 + 2 files changed, 79 insertions(+), 0 deletions(-) create mode 100644 lisp/ob-maxima.el diff --git a/lisp/ob-maxima.el b/lisp/ob-maxima.el new file mode 100644 index 0000000..f72567f --- /dev/null +++ b/lisp/ob-maxima.el @@ -0,0 +1,78 @@ +;;; org-babel-maxima.el --- org-babel functions for maxima evaluation + +;; Copyright (c) 2009, 2010, 2011 Eric S Fraga, Eric Schulte + +;; Author: Eric S Fraga, Eric Schulte +;; Keywords: literate programming, reproducible research, maxima +;; Homepage: http://orgmode.org +;; Version: 0.01 + +;;; License: + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; Org-Babel support for evaluating maxima entries. +;; +;; This differs from most standard languages in that +;; +;; 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 + +;;; Code: +(require 'ob) + +(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) + +(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' " + (delq nil + (mapcar (lambda (line) + (unless (or (string-match "batch" line) + (string-match "replaced" line) + (= 0 (length line))) + line)) + (split-string raw)))) + (org-babel-eval cmd "")))) + +(defun org-babel-prep-session:maxima (session params) + (error "Maxima does not support sessions")) + +(provide 'ob-maxima) + +;; arch-tag: d86c97ac-7eab-4349-8d8b-302dd09779a8 + +;;; org-babel-maxima.el ends here diff --git a/lisp/org.el b/lisp/org.el index 96ad8ff..ae0ef5e 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -164,6 +164,7 @@ requirements) is loaded." (const :tag "Javascript" js) (const :tag "Latex" latex) (const :tag "Ledger" ledger) + (const :tag "Maxima" maxima) (const :tag "Matlab" matlab) (const :tag "Mscgen" mscgen) (const :tag "Ocaml" ocaml) -- 1.7.1 --=-=-=--