Skip to content

Commit 4d07df7

Browse files
cfclrkyantar92
authored andcommitted
ob-clojure.el: Add a :backend header arg to clojure code blocks
* ob-clojure.el (org-babel-header-args:clojure, org-babel-execute:clojure): Add a :backend header arg that can override the configured `org-babel-clojure-backend'. TINYCHANGE
1 parent e2d41c8 commit 4d07df7

File tree

2 files changed

+40
-23
lines changed

2 files changed

+40
-23
lines changed

etc/ORG-NEWS

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,15 @@ This provides a proper counterpart to ~org-babel-pre-tangle-hook~, as
314314
per-tangle-destination. ~org-babel-tangle-finished-hook~ is just run
315315
once after the post tangle hooks.
316316

317+
*** New =:backend= header argument for clojure code blocks
318+
319+
The =:backend= header argument on clojure code blocks can override the
320+
value of ~org-babel-clojure-backend~. For example:
321+
322+
#+begin_src clojure :backend babashka
323+
(range 2)
324+
#+end_src
325+
317326
** New options
318327
*** New custom settings =org-icalendar-scheduled-summary-prefix= and =org-icalendar-deadline-summary-prefix=
319328

lisp/ob-clojure.el

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@
6868
(add-to-list 'org-babel-tangle-lang-exts '("clojurescript" . "cljs"))
6969

7070
(defvar org-babel-default-header-args:clojure '())
71-
(defvar org-babel-header-args:clojure '((ns . :any) (package . :any)))
71+
(defvar org-babel-header-args:clojure
72+
'((ns . :any)
73+
(package . :any)
74+
(backend . ((inf-clojure cider slime babashka nbb)))))
7275
(defvar org-babel-default-header-args:clojurescript '())
7376
(defvar org-babel-header-args:clojurescript '((package . :any)))
7477

@@ -253,28 +256,33 @@
253256
"")))
254257

255258
(defun org-babel-execute:clojure (body params)
256-
"Execute a block of Clojure code with Babel."
257-
(unless org-babel-clojure-backend
258-
(user-error "You need to customize org-babel-clojure-backend"))
259-
(let* ((expanded (org-babel-expand-body:clojure body params))
260-
(result-params (cdr (assq :result-params params)))
261-
result)
262-
(setq result
263-
(cond
264-
((eq org-babel-clojure-backend 'inf-clojure)
265-
(ob-clojure-eval-with-inf-clojure expanded params))
266-
((eq org-babel-clojure-backend 'babashka)
267-
(ob-clojure-eval-with-babashka ob-clojure-babashka-command expanded))
268-
((eq org-babel-clojure-backend 'nbb)
269-
(ob-clojure-eval-with-babashka ob-clojure-nbb-command expanded))
270-
((eq org-babel-clojure-backend 'cider)
271-
(ob-clojure-eval-with-cider expanded params))
272-
((eq org-babel-clojure-backend 'slime)
273-
(ob-clojure-eval-with-slime expanded params))))
274-
(org-babel-result-cond result-params
275-
result
276-
(condition-case nil (org-babel-script-escape result)
277-
(error result)))))
259+
"Execute the BODY block of Clojure code with PARAMS using Babel."
260+
(let* ((backend-override (cdr (assq :backend params)))
261+
(org-babel-clojure-backend
262+
(cond
263+
(backend-override (intern backend-override))
264+
(org-babel-clojure-backend org-babel-clojure-backend)
265+
(t (user-error "You need to customize `org-babel-clojure-backend'
266+
or set the `:backend' header argument")))))
267+
(let* ((expanded (org-babel-expand-body:clojure body params))
268+
(result-params (cdr (assq :result-params params)))
269+
result)
270+
(setq result
271+
(cond
272+
((eq org-babel-clojure-backend 'inf-clojure)
273+
(ob-clojure-eval-with-inf-clojure expanded params))
274+
((eq org-babel-clojure-backend 'babashka)
275+
(ob-clojure-eval-with-babashka ob-clojure-babashka-command expanded))
276+
((eq org-babel-clojure-backend 'nbb)
277+
(ob-clojure-eval-with-babashka ob-clojure-nbb-command expanded))
278+
((eq org-babel-clojure-backend 'cider)
279+
(ob-clojure-eval-with-cider expanded params))
280+
((eq org-babel-clojure-backend 'slime)
281+
(ob-clojure-eval-with-slime expanded params))))
282+
(org-babel-result-cond result-params
283+
result
284+
(condition-case nil (org-babel-script-escape result)
285+
(error result))))))
278286

279287
(defun org-babel-execute:clojurescript (body params)
280288
"Evaluate BODY with PARAMS as ClojureScript code."

0 commit comments

Comments
 (0)