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

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

[nongnu] elpa/geiser-racket e1b6db4 033/191: Racket: new meta-commands:


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-racket e1b6db4 033/191: Racket: new meta-commands: , eval , apply , no-values
Date: Sun, 1 Aug 2021 18:31:55 -0400 (EDT)

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

    Racket: new meta-commands: ,eval ,apply ,no-values
---
 geiser/user.rkt | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/geiser/user.rkt b/geiser/user.rkt
index b476de4..272fcd9 100644
--- a/geiser/user.rkt
+++ b/geiser/user.rkt
@@ -13,7 +13,7 @@
 
 (provide enter!)
 
-(require geiser/enter geiser/eval (for-syntax racket/base))
+(require geiser/main geiser/enter geiser/eval (for-syntax racket/base))
 
 (define top-namespace (current-namespace))
 
@@ -32,12 +32,28 @@
 
 (define orig-reader (current-prompt-read))
 
+(define (geiser-eval)
+  (define geiser-main (module->namespace 'geiser/main))
+  (let* ((mod (read))
+         (lang (read))
+         (form (read)))
+    (datum->syntax #f
+                   (list 'quote
+                         (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)))))))
+
 (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))
+      ((uq cmd) (eq? 'unquote (syntax-e #'uq))
+       (case (syntax-e #'cmd)
+         ((enter) (enter! (read) #'cmd))
+         ((eval) (geiser-eval))
+         ((no-values) (datum->syntax #f (void)))
+         (else form)))
       (_ form))))
 
 (define (init)



reply via email to

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