summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstardiviner <numbchild@gmail.com>2016-04-02 00:46:36 +0800
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2016-04-10 10:07:38 +0200
commitd79835a821f24fdc32a0f46630f1b31c58fbbb4a (patch)
tree9408a0ef25b208155f5050ed98407750c3881114
parenta6ccd4ad95167457175710e767365cdff65dc359 (diff)
downloadorg-mode-d79835a821f24fdc32a0f46630f1b31c58fbbb4a.tar.gz
ob-lisp: Add SLY support
* ob-lisp.el (org-babel-lisp-eval-fn): New variable. (org-babel-execute:lisp): Support using SLY to evaluate lisp src block. Let user can evaluate Lisp src block with SLY. Modified from a patch proposal by stardiviner. TINYCHANGE
-rw-r--r--etc/ORG-NEWS2
-rw-r--r--lisp/ob-lisp.el56
2 files changed, 39 insertions, 19 deletions
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 82d5ad0..6b1d9d5 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -138,6 +138,8 @@ a broken internal link. See its docstring for more information.
unlike to existing ~\vert~, which is expanded as ~&vert;~ when using
a HTML derived export back-end.
*** Babel
+**** Support for SLY in Lisp blocks
+See ~org-babel-lisp-eval-fn~ to activate it.
**** Support for Stan language
New ob-stan.el library.
diff --git a/lisp/ob-lisp.el b/lisp/ob-lisp.el
index 64b032d..0ed4d84 100644
--- a/lisp/ob-lisp.el
+++ b/lisp/ob-lisp.el
@@ -25,16 +25,29 @@
;;; Commentary:
-;;; support for evaluating common lisp code, relies on slime for all eval
+;;; Support for evaluating Common Lisp code, relies on SLY or SLIME
+;;; for all eval.
;;; Requirements:
-;; Requires SLIME (Superior Lisp Interaction Mode for Emacs.)
-;; See http://common-lisp.net/project/slime/
+;; Requires SLY (Sylvester the Cat's Common Lisp IDE) or SLIME
+;; (Superior Lisp Interaction Mode for Emacs). See:
+;; - https://github.com/capitaomorte/sly
+;; - http://common-lisp.net/project/slime/
;;; Code:
(require 'ob)
+(defcustom org-babel-lisp-eval-fn "sly-eval"
+ "The function to be called to evaluate code on the Lisp side.
+It can be set to either \"sly-eval\" or \"slime-val\"."
+ :group 'org-babel
+ :version "25.1"
+ :package-version '(Org . "8.3")
+ :options '("sly-eval" "slime-eval")
+ :type 'stringp)
+
+(declare-function sly-eval "ext:sly" (sexp &optional package))
(declare-function slime-eval "ext:slime" (sexp &optional package))
(defvar org-babel-tangle-lang-exts)
@@ -72,24 +85,29 @@ current directory string."
body)))
(defun org-babel-execute:lisp (body params)
- "Execute a block of Common Lisp code with Babel."
- (require 'slime)
+ "Execute a block of Common Lisp code with Babel.
+BODY is the contents of the block, as a string. PARAMS is
+a property list containing the parameters of the block."
+ (require (pcase org-babel-lisp-eval-fn
+ ("slime-eval" 'slime)
+ ("sly-eval" 'sly)))
(org-babel-reassemble-table
(let ((result
- (funcall (if (member "output" (cdr (assoc :result-params params)))
- #'car #'cadr)
- (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\n)")
- (buffer-substring-no-properties
- (point-min) (point-max)))))
- (cdr (assoc :package params)))))))
+ (funcall (if (member "output" (cdr (assoc :result-params params)))
+ #'car #'cadr)
+ (with-temp-buffer
+ (insert (org-babel-expand-body:lisp body params))
+ (funcall org-babel-lisp-eval-fn
+ `(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\n)")
+ (buffer-substring-no-properties
+ (point-min) (point-max)))))
+ (cdr (assoc :package params)))))))
(org-babel-result-cond (cdr (assoc :result-params params))
result
(condition-case nil