;;; ob-clojure.el --- org-babel functions for clojure evaluation
-;; Copyright (C) 2009-2012 Free Software Foundation, Inc.
+;; Copyright (C) 2009-2016 Free Software Foundation, Inc.
;; Author: Joel Boehland
;; Eric Schulte
;;; Commentary:
-;;; support for evaluating clojure code, relies on slime for all eval
+;; Support for evaluating clojure code, relies on slime for all eval.
;;; Requirements:
-;;; - clojure (at least 1.2.0)
-;;; - clojure-mode
-;;; - slime
-;;; - swank-clojure
+;; - clojure (at least 1.2.0)
+;; - clojure-mode
+;; - slime
-;;; By far, the best way to install these components is by following
-;;; the directions as set out by Phil Hagelberg (Technomancy) on the
-;;; web page: http://technomancy.us/126
+;; By far, the best way to install these components is by following
+;; the directions as set out by Phil Hagelberg (Technomancy) on the
+;; web page: http://technomancy.us/126
;;; Code:
(require 'ob)
(add-to-list 'org-babel-tangle-lang-exts '("clojure" . "clj"))
(defvar org-babel-default-header-args:clojure '())
-(defvar org-babel-header-arg-names:clojure '(package))
+(defvar org-babel-header-args:clojure '((package . :any)))
(defun org-babel-expand-body:clojure (body params)
"Expand BODY according to PARAMS, return the expanded body."
(defun org-babel-execute:clojure (body params)
"Execute a block of Clojure code with Babel."
- (require 'slime) (require 'swank-clojure)
+ (require 'slime)
(with-temp-buffer
(insert (org-babel-expand-body:clojure body params))
- ((lambda (result)
- (let ((result-params (cdr (assoc :result-params params))))
- (if (or (member "scalar" result-params)
- (member "verbatim" result-params))
- result
- (condition-case nil (org-babel-script-escape result)
- (error result)))))
- (slime-eval
- `(swank:interactive-eval-region
- ,(buffer-substring-no-properties (point-min) (point-max)))
- (cdr (assoc :package params))))))
+ (let ((result
+ (slime-eval
+ `(swank:eval-and-grab-output
+ ,(buffer-substring-no-properties (point-min) (point-max)))
+ (cdr (assoc :package params)))))
+ (let ((result-params (cdr (assoc :result-params params))))
+ (org-babel-result-cond result-params
+ result
+ (condition-case nil (org-babel-script-escape result)
+ (error result)))))))
(provide 'ob-clojure)