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

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

[nongnu] elpa/geiser-racket 05d1807 031/191: Racket: , enter meta-comman


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-racket 05d1807 031/191: Racket: , enter meta-command instead of namespace clobbering
Date: Sun, 1 Aug 2021 18:31:54 -0400 (EDT)

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

    Racket: ,enter meta-command instead of namespace clobbering
---
 geiser/user.rkt | 55 ++++++++++++++++++++++++-------------------------------
 1 file changed, 24 insertions(+), 31 deletions(-)

diff --git a/geiser/user.rkt b/geiser/user.rkt
index 33b8186..b476de4 100644
--- a/geiser/user.rkt
+++ b/geiser/user.rkt
@@ -15,42 +15,35 @@
 
 (require geiser/enter geiser/eval (for-syntax racket/base))
 
-(define-syntax (enter! stx)
-  (syntax-case stx ()
-    [(enter! mod)
-     (if (or (not (syntax-e #'mod))
-             (module-path? (syntax->datum #'mod)))
-         #'(do-enter! 'mod)
-         (raise-syntax-error
-          #f
-          "not a valid module path, and not #f"
-          stx
-          #'mod))]
-    [_ (raise-syntax-error
-        #f
-        "bad syntax; should be `(enter! <module-path-or-#f>)'"
-        stx)]))
-
-(define orig-namespace (current-namespace))
-
-(define (do-enter! mod)
-  (if mod
-      (begin
-        (enter-module mod)
-        (let ([ns (module->namespace mod)])
-          (current-namespace ns)
-          (namespace-require 'geiser/user)))
-      (current-namespace orig-namespace)))
-
+(define top-namespace (current-namespace))
+
+(define (enter! mod stx)
+  (cond ((not mod) (current-namespace top-namespace))
+        ((module-path? mod)
+         (enter-module mod)
+         (current-namespace (module->namespace mod)))
+        (else (raise-syntax-error
+               #f
+               "not a valid module path, and not #f"
+               stx
+               mod))))
 
 (define orig-loader (current-load/use-compiled))
 
+(define orig-reader (current-prompt-read))
+
+(define (geiser-read)
+  (let ((form (orig-reader)))
+    (syntax-case form ()
+      ((uq cmd) (and (eq? 'unquote (syntax-e #'uq))
+                     (eq? 'enter (syntax-e #'cmd)))
+       (enter! (read) #'cmd))
+      (_ form))))
+
 (define (init)
   (compile-enforce-module-constants #f)
   (current-load/use-compiled (module-loader orig-loader))
-  (current-prompt-read (compose (make-repl-reader (current-prompt-read))
-                                current-namespace)))
+  (current-prompt-read
+   (compose (make-repl-reader geiser-read) current-namespace)))
 
 (init)
-
-;;; user.rkt ends here



reply via email to

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