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

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

[nongnu] elpa/racket-mode ee67d2d4f7: Handle htdp/bsl number-markup outp


From: ELPA Syncer
Subject: [nongnu] elpa/racket-mode ee67d2d4f7: Handle htdp/bsl number-markup output; fixes #732
Date: Sat, 7 Dec 2024 13:00:30 -0500 (EST)

branch: elpa/racket-mode
commit ee67d2d4f78a6edfe43ad781830d8cc65fb03982
Author: Greg Hendershott <git@greghendershott.com>
Commit: Greg Hendershott <git@greghendershott.com>

    Handle htdp/bsl number-markup output; fixes #732
    
    Although it's wrong for htdp/bsl to assume it's running under DrRacket
    only because the output port supports port-writes-special?,
    accommodate this behavior by intercepting number-markup structs in
    elisp.rkt.
    
    Note: These still end up being written as "specials", so also adjust
    the Emacs front end to handle values other than images.
    
    Note: Similar considerations as with file/convertible due to Racket
    structs being generative.
    
    Note: Must handle simple-tree-text-markup/data missing in older
    Rackets
---
 racket-repl.el   |  7 +++++--
 racket/elisp.rkt | 20 +++++++++++++++++---
 racket/gui.rkt   |  5 +++++
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/racket-repl.el b/racket-repl.el
index 80b5825936..e569423994 100644
--- a/racket-repl.el
+++ b/racket-repl.el
@@ -280,8 +280,11 @@ live prompt this marker will be at `point-max'.")
             ('value
              (insert-faced value 'racket-repl-value t))
             ('value-special
-             (pcase-let ((`(image . ,file) value))
-               (racket--repl-insert-image file)))
+             (pcase value
+               (`(image . ,file)
+                (racket--repl-insert-image file))
+               (value
+                (insert-faced (format "%s" value) 'racket-repl-value t))))
             ('error
              (pcase value
                (`(,msg ,srclocs (,context-kind . ,context-names-and-locs))
diff --git a/racket/elisp.rkt b/racket/elisp.rkt
index fcc872c53d..92fdcefde2 100644
--- a/racket/elisp.rkt
+++ b/racket/elisp.rkt
@@ -7,7 +7,16 @@
          racket/match
          racket/port
          racket/set
-         syntax/parse/define)
+         syntax/parse/define
+         "safe-dynamic-require.rkt")
+
+(define number-markup?
+  (safe-dynamic-require 'simple-tree-text-markup/data 'number-markup?
+                        (λ () (λ _ #f))))
+
+(define number-markup-number
+  (safe-dynamic-require 'simple-tree-text-markup/data 'number-markup-number
+                        (λ () (λ _ 0))))
 
 (provide elisp-read
          elisp-bool/c
@@ -77,8 +86,13 @@
          (? symbol? v)
          (? string? v)) (write v)]
     [(? bytes? bstr)    (write (bytes->string/utf-8 bstr))] ; ???
-    [v                  (eprintf "elisp-write can't write Racket value ~s\n" v)
-                        (void)]))
+    ;; #731: htdp/bsl assumes port-writes-special? means it can write
+    ;; number-markup structs. It ought not to, but accomodate here.
+    ;; Note: See gui.rkt for namespace-attach-module of
+    ;; simple-tree-text-markup/data, necessary because generative
+    ;; structs.
+    [(? number-markup? m) (write (number-markup-number m))]
+    [v                    (write (format "~s" v))]))
 
 (module+ test
   (require rackunit)
diff --git a/racket/gui.rkt b/racket/gui.rkt
index a63096b892..0b6bfa2e9f 100644
--- a/racket/gui.rkt
+++ b/racket/gui.rkt
@@ -68,6 +68,11 @@
   ;; image.rkt.
   (namespace-attach-module our-ns 'file/convertible new-ns)
 
+  ;; Likewise for number-markup struct used in elisp.rkt to accomodate
+  ;; htdp/bsl; issue #732.
+  (with-handlers ([exn:fail? void])
+    (namespace-attach-module our-ns 'simple-tree-text-markup/data new-ns))
+
   new-ns)
 
 ;; Like mz/mr from racket/sandbox.



reply via email to

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