diff options
Diffstat (limited to 'elisp/geiser-repl.el')
-rw-r--r-- | elisp/geiser-repl.el | 69 |
1 files changed, 2 insertions, 67 deletions
diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index 704a7fb..7eb7cf0 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -19,6 +19,7 @@ (require 'geiser-eval) (require 'geiser-connection) (require 'geiser-menu) +(require 'geiser-image) (require 'geiser-custom) (require 'geiser-base) @@ -118,17 +119,6 @@ If you have a slow system, try to increase this time." :type 'boolean :group 'geiser-repl) -(geiser-custom--defcustom geiser-system-image-viewer "display" - "Which system image viewer program to invoke upon M-x -`geiser-view-last-image'." - :type 'string - :group 'geiser-repl) - -(geiser-custom--defcustom geiser-image-cache-keep-last 10 - "How many images to keep in geiser's image cache." - :type 'integer - :group 'geiser-repl) - (geiser-custom--defface repl-input 'comint-highlight-input geiser-repl "evaluated input highlighting") @@ -282,64 +272,9 @@ module command as a string") (geiser-repl--host) (geiser-repl--port))))) -(defvar geiser-image-cache-dir nil) -;; XXX make this a parameter from Racket... - -(defun geiser-repl--list-image-cache () - "List all the images in the image cache." - (and geiser-image-cache-dir - (file-directory-p geiser-image-cache-dir) - (let ((files (directory-files-and-attributes - geiser-image-cache-dir t "geiser-img-[0-9]*.png"))) - (mapcar 'car - (sort files '(lambda (a b) - (< (float-time (nth 6 a)) - (float-time (nth 6 b))))))))) - -(defun geiser-repl--clean-image-cache () - "Clean all except for the last `geiser-image-cache-keep-last' -images in 'geiser-image-cache-dir'." - (interactive) - (dolist (file (butlast (geiser-repl--list-image-cache) - geiser-image-cache-keep-last)) - (delete-file file))) - -(defun geiser-repl--replace-images () - "Replace all image patterns with actual images" - (with-silent-modifications - (save-excursion - (goto-char (point-min)) - (while (re-search-forward "#<Image: \\([-+./_0-9a-zA-Z]+\\)>" nil t) - ;; can't pass a filename to create-image because emacs might - ;; not display it before it gets deleted (race condition) - (let* ((file (match-string 1)) - (begin (match-beginning 0)) - (end (match-end 0))) - (delete-region begin end) - (if (and geiser-repl-inline-images (display-images-p)) - (put-image (create-image file) begin "[image]") - (progn - (goto-char begin) - (insert "[image] ; use M-x geiser-view-last-image to view"))) - (setq geiser-image-cache-dir (file-name-directory file)) - (geiser-repl--clean-image-cache)))))) - -(defun geiser-view-last-image (n) - "Open the last displayed image in the system's image viewer. - -With prefix arg, open the N-th last shown image in the system's image viewer." - (interactive "p") - (let ((images (reverse (geiser-repl--list-image-cache)))) - (if (>= (length images) n) - (start-process "Geiser image view" - nil - geiser-system-image-viewer - (nth (- n 1) images)) - (error "There aren't %d recent images" n)))) - (defun geiser-repl--output-filter (txt) (geiser-con--connection-update-debugging geiser-repl--connection txt) - (geiser-repl--replace-images) + (geiser-image--replace-images geiser-repl-inline-images) (when (string-match-p (geiser-con--connection-prompt geiser-repl--connection) txt) (geiser-autodoc--disinhibit-autodoc))) |