emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-racket 7593814 053/191: Racket reconnected


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-racket 7593814 053/191: Racket reconnected
Date: Sun, 1 Aug 2021 18:31:59 -0400 (EDT)

branch: elpa/geiser-racket
commit 7593814631db3eeb97f1bfbfbb35c70f7b3e84d6
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    Racket reconnected
---
 geiser.rkt        |  4 +---
 geiser/server.rkt | 12 ++---------
 geiser/user.rkt   | 59 +++++++++++++++++++++++++++++++++++++++++++------------
 3 files changed, 49 insertions(+), 26 deletions(-)

diff --git a/geiser.rkt b/geiser.rkt
index 44a2ed8..3d75157 100644
--- a/geiser.rkt
+++ b/geiser.rkt
@@ -18,8 +18,6 @@
          (version)))
 
 (require errortrace)
-
 (require geiser/user)
-(init-geiser-repl)
 
-;;; geiser.rkt ends here
+(init-geiser-repl)
diff --git a/geiser/server.rkt b/geiser/server.rkt
index cf86b2c..10b15a1 100644
--- a/geiser/server.rkt
+++ b/geiser/server.rkt
@@ -11,14 +11,6 @@
 
 #lang racket/base
 
-(require geiser/user mzlib/thread)
-(provide run-geiser-server start-geiser)
+(require geiser/user)
+(provide start-geiser)
 
-(define (run-geiser-server port enforce-module-constants)
-  (run-server port
-              (lambda (in out)
-                (run-geiser-repl in out enforce-module-constants))
-              #f))
-
-(define (start-geiser (port 1969) (enforce-module-constants #f))
-  (thread (lambda () (run-geiser-server port enforce-module-constants))))
diff --git a/geiser/user.rkt b/geiser/user.rkt
index 412cfe7..9d5b169 100644
--- a/geiser/user.rkt
+++ b/geiser/user.rkt
@@ -11,10 +11,15 @@
 
 #lang racket/base
 
-(provide init-geiser-repl run-geiser-repl enter!)
+(provide init-geiser-repl run-geiser-server start-geiser)
 
 (require (for-syntax racket/base)
-        geiser/main geiser/enter geiser/eval geiser/modules)
+         mzlib/thread
+         racket/tcp
+         geiser/main
+         geiser/enter
+         geiser/eval
+         geiser/modules)
 
 (define top-namespace (current-namespace))
 
@@ -42,29 +47,38 @@
                          (cond [(equal? form '(unquote apply))
                                 (let* ([proc (eval (read) geiser-main)]
                                        [args (read)])
-                                  ((geiser:eval lang) `(,proc ,@args) mod))]
-                               [else ((geiser:eval lang) form mod)])))))
+                                  (eval-in `(,proc ,@args) mod lang))]
+                               [else (eval-in form mod lang)])))))
 
-(define (geiser-read)
-  (printf "racket@~a> " (namespace->module-name (current-namespace)))
+(define ((geiser-read prompt))
+  (prompt)
   (flush-output)
   (let* ([in (current-input-port)]
         [form ((current-read-interaction) (object-name in) in)])
     (syntax-case form ()
       [(uq cmd) (eq? 'unquote (syntax-e #'uq))
        (case (syntax-e #'cmd)
-         ((enter) (enter! (read) #'cmd))
-         ((geiser-eval) (geiser-eval))
-         ((geiser-no-values) (datum->syntax #f (void)))
-         (else form))]
+         [(start-geiser) (datum->syntax #f `(list 'port ,(start-geiser)))]
+         [(enter) (enter! (read) #'cmd)]
+         [(geiser-eval) (geiser-eval)]
+         [(geiser-no-values) (datum->syntax #f (void))]
+         [else form])]
       [_ form])))
 
-(define geiser-prompt-read (make-repl-reader geiser-read))
+(define geiser-prompt
+  (lambda () (printf "> ")))
+
+(define geiser-server-prompt
+  (lambda ()
+    (printf "racket@~a> " (namespace->module-name (current-namespace)))))
+
+(define (geiser-prompt-read prompt)
+  (make-repl-reader (geiser-read prompt)))
 
 (define (init-geiser-repl)
   (compile-enforce-module-constants #f)
   (current-load/use-compiled geiser-loader)
-  (current-prompt-read geiser-prompt-read))
+  (current-prompt-read (geiser-prompt-read geiser-prompt)))
 
 (define (run-geiser-repl in out enforce-module-constants)
   (parameterize [(compile-enforce-module-constants enforce-module-constants)
@@ -72,5 +86,24 @@
                  (current-output-port out)
                  (current-error-port out)
                  (current-load/use-compiled geiser-loader)
-                 (current-prompt-read geiser-prompt-read)]
+                 (current-prompt-read (geiser-prompt-read
+                                       geiser-server-prompt))]
     (read-eval-print-loop)))
+
+(define server-channel (make-channel))
+
+(define (run-geiser-server port enforce-module-constants)
+  (run-server port
+              (lambda (in out)
+                (run-geiser-repl in out enforce-module-constants))
+              #f
+              void
+              (lambda (p _ __)
+                (let ([lsner (tcp-listen p)])
+                  (let-values ([(_ p __ ___) (tcp-addresses lsner #t)])
+                    (channel-put server-channel p)
+                    lsner)))))
+
+(define (start-geiser (port 0) (enforce-module-constants #f))
+  (thread (lambda () (run-geiser-server port enforce-module-constants)))
+  (channel-get server-channel))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]