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

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

[nongnu] elpa/geiser-racket 5e2184b 103/191: racket: displaying images a


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-racket 5e2184b 103/191: racket: displaying images also during evaluations
Date: Sun, 1 Aug 2021 18:32:09 -0400 (EDT)

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

    racket: displaying images also during evaluations
---
 geiser/eval.rkt   |  8 ++++----
 geiser/images.rkt | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 geiser/user.rkt   | 35 +++--------------------------------
 3 files changed, 53 insertions(+), 36 deletions(-)

diff --git a/geiser/eval.rkt b/geiser/eval.rkt
index 26ad959..9b510cf 100644
--- a/geiser/eval.rkt
+++ b/geiser/eval.rkt
@@ -1,6 +1,6 @@
 ;;; eval.rkt -- evaluation
 
-;; Copyright (C) 2009, 2010, 2011 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2011, 2012 Jose Antonio Ortega Ruiz
 
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the Modified BSD License. You should
@@ -18,7 +18,7 @@
          make-repl-reader)
 
 
-(require geiser/enter geiser/modules)
+(require geiser/enter geiser/modules geiser/images)
 (require errortrace/errortrace-lib)
 
 (define last-result (void))
@@ -37,10 +37,10 @@
 
 (define (write-value v)
   (with-output-to-string
-    (lambda () (write v))))
+    (lambda () (maybe-write-image v))))
 
 (define (set-last-result . vs)
-  (set! last-result `((result  ,@(map write-value vs)))))
+  (set! last-result `((result ,@(map write-value vs)))))
 
 (define (call-with-result thunk)
   (set-last-result (void))
diff --git a/geiser/images.rkt b/geiser/images.rkt
new file mode 100644
index 0000000..ddc0286
--- /dev/null
+++ b/geiser/images.rkt
@@ -0,0 +1,46 @@
+;;; images.rkt -- support for image handline
+
+;; Copyright (C) 2012 Jose Antonio Ortega Ruiz
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the Modified BSD License. You should
+;; have received a copy of the license along with this program. If
+;; not, see <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>.
+
+;; Authors: Michael Wilber, Jose Antonio Ortega Ruiz <jao@gnu.org>
+;; Start date: Sun Sep 2, 2012 18:54
+
+
+#lang racket/base
+
+(require racket/file file/convertible racket/pretty)
+(provide image-cache maybe-print-image maybe-write-image)
+
+(define image-cache
+  (let ([ensure-dir (lambda (dir)
+                      (if (path-string? dir)
+                          (begin (make-directory* dir)
+                                 (if (path? dir) (path->string dir) dir))
+                          (path->string (find-system-path 'temp-dir))))])
+    (make-parameter (ensure-dir #f) ensure-dir)))
+
+(define (save-tmpimage imgbytes)
+  ;; Save imgbytes to a new temporary file and return the filename
+  (define filename (make-temporary-file "geiser-img-~a.png" #f (image-cache)))
+  (with-output-to-file filename #:exists 'truncate
+                       (lambda () (display imgbytes)))
+  (format "#<Image: ~a>" filename))
+
+(define (maybe-save-image value)
+  (and (convertible? value)
+       ;; (The above could be problematic if a future version of racket
+       ;; suddenly decides it can "convert" strings to picts)
+       (save-tmpimage (convert value 'png-bytes))))
+
+(define (maybe-print-image value)
+  (cond [(maybe-save-image value) => (lambda (s) (printf "~a\n" s))]
+        [else (unless (void? value)
+                (pretty-print value))]))
+
+(define (maybe-write-image value)
+  (write (or (maybe-save-image value) value)))
diff --git a/geiser/user.rkt b/geiser/user.rkt
index 2eb0cb5..e9540b0 100644
--- a/geiser/user.rkt
+++ b/geiser/user.rkt
@@ -14,12 +14,10 @@
 (provide init-geiser-repl run-geiser-server start-geiser)
 
 (require (for-syntax racket/base)
-         file/convertible
          mzlib/thread
-         racket/file
-         racket/pretty
          racket/tcp
          geiser
+         geiser/images
          geiser/enter
          geiser/eval
          geiser/modules)
@@ -91,41 +89,14 @@
     (printf "racket@~a> "
             (namespace->module-name (current-namespace) (last-entered)))))
 
-(define image-cache
-  (let ([ensure-dir (lambda (dir)
-                      (if (path-string? dir)
-                          (begin (make-directory* dir)
-                                 (if (path? dir) (path->string dir) dir))
-                          (path->string (find-system-path 'temp-dir))))])
-    (make-parameter (ensure-dir #f) ensure-dir)))
-
 (define (geiser-prompt-read prompt)
   (make-repl-reader (geiser-read prompt)))
 
-(define (geiser-save-tmpimage imgbytes)
-  ;; Save imgbytes to a new temporary file and return the filename
-  (define filename (make-temporary-file "geiser-img-~a.png" #f (image-cache)))
-  (with-output-to-file filename #:exists 'truncate
-    (lambda () (display imgbytes)))
-  filename)
-
-(define (geiser-maybe-print-image value)
-  (cond
-   [(and (convertible? value)
-         (convert value 'png-bytes))
-    => (lambda (pngbytes)
-         ;; (The above could be problematic if a future version of racket
-         ;; suddenly decides it can "convert" strings to picts)
-         (printf "#<Image: ~a>\n" (geiser-save-tmpimage pngbytes)))]
-   [else
-    (unless (void? value)
-      (pretty-print value))]))
-
 (define (init-geiser-repl)
   (compile-enforce-module-constants #f)
   (current-load/use-compiled geiser-loader)
   (current-prompt-read (geiser-prompt-read geiser-prompt))
-  (current-print geiser-maybe-print-image))
+  (current-print maybe-print-image))
 
 (define (run-geiser-repl in out enforce-module-constants)
   (parameterize [(compile-enforce-module-constants enforce-module-constants)
@@ -134,7 +105,7 @@
                  (current-error-port out)
                  (current-load/use-compiled geiser-loader)
                  (current-prompt-read (geiser-prompt-read geiser-prompt))
-                 (current-print geiser-maybe-print-image)]
+                 (current-print maybe-print-image)]
     (read-eval-print-loop)))
 
 (define server-channel (make-channel))



reply via email to

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