From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [babel] maxima support? Date: Mon, 14 Mar 2011 15:26:30 -0600 Message-ID: <874o75wfzf.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> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from [140.186.70.92] (port=37493 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PzFKx-0000SC-OQ for emacs-orgmode@gnu.org; Mon, 14 Mar 2011 17:30:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PzFHw-0001xz-S9 for emacs-orgmode@gnu.org; Mon, 14 Mar 2011 17:26:54 -0400 Received: from mail-yw0-f41.google.com ([209.85.213.41]:35937) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PzFHw-0001xu-NN for emacs-orgmode@gnu.org; Mon, 14 Mar 2011 17:26:52 -0400 Received: by yws5 with SMTP id 5so2912630yws.0 for ; Mon, 14 Mar 2011 14:26:52 -0700 (PDT) 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 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 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-adding-support-for-Maxima-code-blocks-thanks-to-Eric.patch >From 8c8f85e2a98430cc147749b8fa67dbba53c0ccb3 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..c775f92 --- /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 --=-=-= Content-Type: text/plain Eric S Fraga writes: > "Eric Schulte" writes: > >> Great, Thanks for sharing! >> >> Why don't we replace the shell-script munging with some elisp munging >> and add this to the core? >> >> I can help with the translation to elisp (although I may be busy through >> the weekend/week). >> >> Best -- Eric > > I'd be very happy to have the code made more portable, and integrated > properly within org-babel. I, unfortunately, don't have any of the > elisp skills that would be necessary... my upbringing in the early days > of Unix are showing here: I solve everything with concatenation of > targeted shell commands ;-) Given that I use a sequence of regex based > commands (grep and sed), I imagine it would be trivial for somebody with > more elisp expertise to translate my sequence of commands into elisp > code? --=-=-=--