summaryrefslogtreecommitdiff
path: root/scheme/gambit/geiser
diff options
context:
space:
mode:
Diffstat (limited to 'scheme/gambit/geiser')
-rw-r--r--scheme/gambit/geiser/gambit.scm36
1 files changed, 34 insertions, 2 deletions
diff --git a/scheme/gambit/geiser/gambit.scm b/scheme/gambit/geiser/gambit.scm
index 805fe31..b63faa7 100644
--- a/scheme/gambit/geiser/gambit.scm
+++ b/scheme/gambit/geiser/gambit.scm
@@ -1,4 +1,36 @@
-;; TODO implement functions required by geiser
+;;;gambit.scm gambit geiser interaction
-(display "loaded gambit.scm\n")
+(define (geiser-load-file file)
+ (let* ((file (if (symbol? file) (symbol->string file) file))
+ (found-file (geiser-find-file file)))
+ (call-with-result
+ (lambda ()
+ (when found-file
+ (load found-file))))))
+(define (geiser:newline)
+ (newline))
+
+(define (geiser:no-values)
+ (values))
+
+;; Spawn a server for remote repl access TODO make it works with remote repl
+
+(define (geiser-start-server . rest)
+ (let* ((listener (tcp-listen 0))
+ (port (tcp-listener-port listener)))
+ (define (remote-repl)
+ (receive (in out) (tcp-accept listener)
+ (current-input-port in)
+ (current-output-port out)
+ (current-error-port out)
+
+ (repl)))
+
+ (thread-start! (make-thread remote-repl))
+
+ (write-to-log `(geiser-start-server . ,rest))
+ (write-to-log `(port ,port))
+
+ (write `(port ,port))
+ (newline)))