- (message "executing Lisp source code block")
- (let* ((session (org-babel-lisp-initiate-session
- (cdr (assoc :session params))))
- (result-type (cdr (assoc :result-type params)))
- (full-body (org-babel-expand-body:lisp body params)))
- (read
- (if session
- ;; session evaluation
- (save-window-excursion
- (cadr (slime-eval `(swank:eval-and-grab-output ,full-body))))
- ;; external evaluation
- (let ((script-file (org-babel-temp-file "lisp-script-")))
- (with-temp-file script-file
- (insert
- ;; return the value or the output
- (if (string= result-type "value")
- (format "(print %s)" full-body)
- full-body)))
- (org-babel-eval
- (format "%s %s" org-babel-lisp-cmd
- (org-babel-process-file-name script-file)) ""))))))
-
-;; This function should be used to assign any variables in params in
-;; the context of the session environment.
-(defun org-babel-prep-session:lisp (session params)
- "Prepare SESSION according to the header arguments specified in PARAMS."
- (error "not yet implemented"))
-
-(defun org-babel-lisp-initiate-session (&optional session)
- "If there is not a current inferior-process-buffer in SESSION
-then create. Return the initialized session."
- (require 'slime)
- (unless (string= session "none")
- (save-window-excursion
- (or (slime-connected-p)
- (slime-process)))))
+ (org-babel-reassemble-table
+ ((lambda (result)
+ (if (member "output" (cdr (assoc :result-params params)))
+ (car result)
+ (condition-case nil
+ (read (org-babel-lisp-vector-to-list (cadr result)))
+ (error (cadr result)))))
+ (with-temp-buffer
+ (insert (org-babel-expand-body:lisp body params))
+ (slime-eval `(swank:eval-and-grab-output
+ ,(let ((dir (if (assoc :dir params)
+ (cdr (assoc :dir params))
+ default-directory)))
+ (format
+ (if dir (format org-babel-lisp-dir-fmt dir) "(progn %s)")
+ (buffer-substring-no-properties
+ (point-min) (point-max)))))
+ (cdr (assoc :package params)))))
+ (org-babel-pick-name (cdr (assoc :colname-names params))
+ (cdr (assoc :colnames params)))
+ (org-babel-pick-name (cdr (assoc :rowname-names params))
+ (cdr (assoc :rownames params)))))
+
+(defun org-babel-lisp-vector-to-list (results)
+ ;; TODO: better would be to replace #(...) with [...]
+ (replace-regexp-in-string "#(" "(" results))