diff options
-rw-r--r-- | elisp/geiser-racket.el | 6 | ||||
-rw-r--r-- | scheme/racket/geiser/user.rkt | 55 |
2 files changed, 27 insertions, 34 deletions
diff --git a/elisp/geiser-racket.el b/elisp/geiser-racket.el index 28c576a..f38a4e9 100644 --- a/elisp/geiser-racket.el +++ b/elisp/geiser-racket.el @@ -132,9 +132,9 @@ This function uses `geiser-racket-init-file' if it exists." (defun geiser-racket--enter-command (module) (when (stringp module) - (cond ((zerop (length module)) "(enter! #f)") - ((file-name-absolute-p module) (format "(enter! (file %S))" module)) - (t (format "(enter! %s)" module))))) + (cond ((zerop (length module)) ",enter #f") + ((file-name-absolute-p module) (format ",enter (file %S)" module)) + (t (format ",enter %s" module))))) (defun geiser-racket--import-command (module) (and (stringp module) diff --git a/scheme/racket/geiser/user.rkt b/scheme/racket/geiser/user.rkt index 33b8186..b476de4 100644 --- a/scheme/racket/geiser/user.rkt +++ b/scheme/racket/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 |