Dan, Below is the final proposal for org-babel-mscgen.el.
Already sent form to ass...@gnu.org, got no answer (I assume it is OK). I remade all of the code, so almost no traces from org-babel-ditaa. On Mon, May 17, 2010 at 10:24:10PM -0300, Juan wrote: > On Mon, May 17, 2010 at 07:04:14PM -0400, Dan Davison wrote: > > Juan <pech...@computer.org> writes: > > > Below goes code snippet using org-babel instead of org-export. > > And a couple of little questions: > > > > - I think I'd prefer to get rid of the org-mscgen-path variable, and > > simply require that mscgen is on the user's $PATH. Is that OK or am I > > missing a reason for doing it differently? > > You're right. I'll get rid of it. Done. Now mscgen must be accessible on exec-path. > ... > > - If you are feeling energetic, it would be really nice to check the > > exit code from the shell-command and use org-babel-error-notify if > > necessary > > I'll look into it. Done. Now error messages from mscgen are passed to org-babel-error-notify. Just a question on style: If you look at the '(unless' line below, I throw an elisp 'error' if the user forgets to add an output file to the #+begin_src header. Is this OK, or should I stick to org-babel-error-notify with a dummy exit code? Thanks & regards, .j. 8<------------------------------------------------------------ ;;; org-babel-mscgen.el --- org-babel functions for mscgen evaluation ;;; TODO insert license information ;;; Author: Juan Pechiar (j...@pechiar.com) ;;; Commentary: ;; ;; This software provides EMACS org-babel export support for message ;; sequence charts. The mscgen utility is used for processing the ;; sequence definition, and must therefore be installed in the system. ;; ;; Mscgen is available and documented at http://www.mcternan.me.uk/mscgen/index.html ;; ;; Example: ;; ;; #+begin_src mscgen :file example.png ;; msc { ;; A,B; ;; A -> B [ label = "send message" ]; ;; A <- B [ label = "get answer" ]; ;; } ;; #+end_src ;;; Code: (require 'org-babel) (org-babel-add-interpreter "mscgen") (add-to-list 'org-babel-tangle-langs '("mscgen" "mscgen")) (defvar org-babel-default-header-args:mscgen '((:results . "file") (:exports . "results")) "Default arguments to use when evaluating a mscgen source block.") (defun org-babel-expand-body:mscgen (body params &optional processed-params) body) (defun org-babel-execute:mscgen (body params) "Execute a block of Mscgen code with org-babel. This function is called by `org-babel-execute-src-block'." (message "executing Mscgen source code block") (let* ((out-file (or (cdr (assoc :file params)) "output.png" )) exit-code (stderr (with-temp-buffer (insert body) (setq exit-code (org-babel-shell-command-on-region (point-min) (point-max) (concat "mscgen -T png -o " out-file) nil 'replace (current-buffer))) (buffer-string)))) (unless (cdr (assoc :file params)) (setq stderr (concat stderr "\nERROR: no output file specified. Add \":file some_name.png\" to the src header" )) (error stderr)) (if (> exit-code 0) (org-babel-error-notify exit-code stderr)) out-file)) (defun org-babel-prep-session:mscgen (session params) (error "Mscgen does not support sessions")) (provide 'org-babel-mscgen) ;;; org-babel-mscgen.el ends here _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode