emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] Patch for asynchronous export of ocaml code


From: Alan Schmitt
Subject: [O] Patch for asynchronous export of ocaml code
Date: Thu, 02 May 2013 17:02:21 +0200
User-agent: mu4e 0.9.9.5; emacs 24.3.1

Hello,

It is not currently possible to asynchronously export the results of the
evaluation an ocaml babel block because the evaluation needs to start a toplevel
and thus asks the user what program to run. This of course blocks the
asynchronous export.

The attached patch adds a custom variable to specify the name of the command
to run, and directly calls the tuareg function that starts the toplevel given
the command.

For some context, here is the code that starts the caml session.

#+BEGIN_SRC emacs-lisp
(defvar tuareg-interactive-buffer-name)
(defun org-babel-prep-session:ocaml (session params)
  "Prepare SESSION according to the header arguments in PARAMS."
  (require 'tuareg)
  (let ((tuareg-interactive-buffer-name (if (and (not (string= session "none"))
                                                 (not (string= session 
"default"))
                                                 (stringp session))
                                            session
                                          tuareg-interactive-buffer-name)))
    (save-window-excursion
      (if (fboundp 'tuareg-run-caml) (tuareg-run-caml) (tuareg-run-ocaml))
      (get-buffer tuareg-interactive-buffer-name))))
#+END_SRC

And this is the code from tuareg that is run.

#+BEGIN_SRC emacs-lisp
;;;###autoload
(defun tuareg-run-ocaml ()
  "Run an OCaml toplevel process. I/O via buffer `*ocaml-toplevel*'."
  (interactive)
  (tuareg-run-process-if-needed)
  (display-buffer tuareg-interactive-buffer-name))

(defun tuareg-run-process-if-needed (&optional cmd)
  "Run an OCaml toplevel process if needed, with an optional command name.
I/O via buffer `*ocaml-toplevel*'."
  (if cmd
      (setq tuareg-interactive-program cmd)
    (unless (comint-check-proc tuareg-interactive-buffer-name)
      (setq tuareg-interactive-program
            (read-shell-command "OCaml toplevel to run: "
                                tuareg-interactive-program))))
  (unless (comint-check-proc tuareg-interactive-buffer-name)
    (let ((cmdlist (tuareg-args-to-list tuareg-interactive-program))
          (process-connection-type nil))
      (set-buffer (apply (function make-comint) "ocaml-toplevel"
                         (car cmdlist) nil (cdr cmdlist)))
      (tuareg-interactive-mode)
      (sleep-for 1))))
#+END_SRC

With this patch (and setting `org-confirm-babel-evaluate' to nil), I'm able to
export documents requiring the evaluation of caml code asynchronously.

Alan

Attachment: 0001-Babel-ocaml-allow-ocaml-code-to-run-during-asynchron.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]