blob: a33f7cccb86ff8652b897811f1e944b0825960a0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
;;;gambit.scm gambit geiser interaction
(define-macro (geiser:capture-output x . xs)
(let ((out (gensym))
(result (gensym)))
`(let* ((,out (open-output-string))
(,result (parameterize ((current-output-port ,out))
,(cons 'begin (cons x xs)))))
(write `((result ,(object->string ,result))
(out ,(get-output-string ,out))))
(newline))))
(define (geiser:load-file filename)
(geiser:capture-output (load filename)))
(define (geiser:eval2 module form) ;; module is not yet supported in gambit
(geiser:capture-output (eval form)))
(define-macro (geiser:eval module form . rest)
`(geiser:eval2 ,module ,(quote form)))
(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)))
|