From 0fa8a7feacbd5f0fcab697eac3f9bd9c6a4917fa Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Thu, 24 Sep 2009 19:16:42 -0600 Subject: [PATCH] fleshed out org-babel-haskell-prep-session (called with Meta-Down inside source block) --- contrib/babel/lisp/langs/org-babel-haskell.el | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/contrib/babel/lisp/langs/org-babel-haskell.el b/contrib/babel/lisp/langs/org-babel-haskell.el index eb922f4db..3c788dbfa 100644 --- a/contrib/babel/lisp/langs/org-babel-haskell.el +++ b/contrib/babel/lisp/langs/org-babel-haskell.el @@ -81,9 +81,29 @@ variables pre-set using `multiple-value-bind'. (match-string 1 string) string)) +(defun org-babel-haskell-initiate-session (&optional session) + "If there is not a current inferior-process-buffer in SESSION +then create. Return the initialized session." + ;; TODO: make it possible to have multiple sessions + (run-haskell) (current-buffer)) + (defun org-babel-prep-session:haskell (session params) "Prepare SESSION according to the header arguments specified in PARAMS." - (save-window-excursion (run-haskell) (current-buffer))) + (save-window-excursion + (org-babel-haskell-initiate-session session) + (let* ((vars (org-babel-ref-variables params)) + (var-lines (mapconcat ;; define any variables + (lambda (pair) + (format "%s=%s" + (car pair) + (org-babel-ruby-var-to-ruby (cdr pair)))) + vars "\n")) + (load-file (concat (make-temp-file "org-babel-haskell-load") ".hs"))) + (when vars + (with-temp-buffer + (insert var-lines) (write-file load-file) + (haskell-mode) (inferior-haskell-load-file))) + (current-buffer)))) (defun org-babel-haskell-table-or-string (results) "If the results look like a table, then convert them into an