From: Sam <[email protected]>
* lisp/ob-scheme.el (org-babel-execute:scheme):
(org-babel-scheme--get-impl): Extract logic for determining impl as
its own function
(org-babel-scheme-initiate-session):
(org-babel-prep-session:scheme):
(org-babel-load-session:scheme): Added. Implementations similar to
those of other languages (e.g. ob-R)
These new functions make org-babel-pop-to-session and friends work
correctly.
---
lisp/ob-scheme.el | 42 +++++++++++++++++++++++++++++++++++++-----
1 file changed, 37 insertions(+), 5 deletions(-)
diff --git a/lisp/ob-scheme.el b/lisp/ob-scheme.el
index 084d7b75e..2ecc929ca 100644
--- a/lisp/ob-scheme.el
+++ b/lisp/ob-scheme.el
@@ -241,6 +241,13 @@ Emacs-lisp table, otherwise return the results as a
string."
res))
(t res))))
+(defun org-babel-scheme--get-impl (&optional params)
+ (or (when (cdr (assq :scheme params))
+ (intern (cdr (assq :scheme params))))
+ geiser-scheme-implementation
+ geiser-default-implementation
+ (car geiser-active-implementations)))
+
(defun org-babel-execute:scheme (body params)
"Execute a block of Scheme code with org-babel.
This function is called by `org-babel-execute-src-block'."
@@ -250,11 +257,7 @@ This function is called by `org-babel-execute-src-block'."
(buffer-name source-buffer))))
(save-excursion
(let* ((result-type (cdr (assq :result-type params)))
- (impl (or (when (cdr (assq :scheme params))
- (intern (cdr (assq :scheme params))))
- geiser-scheme-implementation
- geiser-default-implementation
- (car geiser-active-implementations)))
+ (impl (org-babel-scheme--get-impl params))
(host (cdr (assq :host params)))
(port (cdr (assq :port params)))
(session (org-babel-scheme-make-session-name
@@ -280,6 +283,35 @@ This function is called by `org-babel-execute-src-block'."
result
(org-babel-scheme--table-or-string table)))))))
+(defun org-babel-scheme-initiate-session (session params)
+ (let ((impl (org-babel-scheme--get-impl params))
+ (host (cdr (assq :host params)))
+ (port (cdr (assq :port params)))
+ (switch-to-buffer-obey-display-actions t)
+ (display-buffer-overriding-action '(display-buffer-no-window
+ (allow-no-window t))))
+ (save-current-buffer
+ (org-babel-scheme-get-repl impl
+ session
+ host
+ port))))
+
+(defun org-babel-prep-session:scheme (session params)
+ (let ((repl (org-babel-scheme-initiate-session session params)))
+ (org-babel-scheme-execute-with-geiser
+ (org-babel-scheme-expand-header-arg-vars (org-babel--get-vars params))
+ nil
+ (org-babel-scheme--get-impl params)
+ session)
+ repl))
+
+(defun org-babel-load-session:scheme (session body params)
+ (save-window-excursion
+ (with-current-buffer (org-babel-prep-session:scheme session params)
+ (goto-char (process-mark (get-buffer-process (current-buffer))))
+ (insert (org-babel-chomp body))
+ (current-buffer))))
+
(provide 'ob-scheme)
;;; ob-scheme.el ends here
--
2.47.3