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


Reply via email to