diff options
Diffstat (limited to 'kitty-graphics.el')
| -rw-r--r-- | kitty-graphics.el | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/kitty-graphics.el b/kitty-graphics.el index 96a3171..cd68992 100644 --- a/kitty-graphics.el +++ b/kitty-graphics.el @@ -863,6 +863,45 @@ image via Kitty graphics instead of an Emacs image spec." ;;;; image-mode integration +(defvar-local kitty-gfx--image-scale 1.0 + "Zoom scale factor for image-mode display. +Values > 1.0 zoom in, < 1.0 zoom out.") + +(defun kitty-gfx--image-mode-render () + "Render the current image file centered at current scale." + (when-let ((file (buffer-file-name))) + (when (kitty-gfx--image-file-p file) + (let* ((inhibit-read-only t) + (win-w (- (window-body-width) 2)) + (win-h (- (window-body-height) 2)) + (max-cols (min win-w kitty-gfx-max-width)) + (max-rows (min win-h kitty-gfx-max-height))) + ;; Remove existing images and clear buffer + (kitty-gfx-remove-images) + (erase-buffer) + (kitty-gfx--display-image-centered + file max-cols max-rows win-w win-h + kitty-gfx--image-scale) + (goto-char (point-min)))))) + +(defun kitty-gfx-image-increase-size () + "Zoom in on the image in image-mode." + (interactive) + (setq kitty-gfx--image-scale (* kitty-gfx--image-scale 1.25)) + (kitty-gfx--image-mode-render)) + +(defun kitty-gfx-image-decrease-size () + "Zoom out on the image in image-mode." + (interactive) + (setq kitty-gfx--image-scale (max 0.1 (* kitty-gfx--image-scale 0.8))) + (kitty-gfx--image-mode-render)) + +(defun kitty-gfx-image-reset-size () + "Reset image zoom to default in image-mode." + (interactive) + (setq kitty-gfx--image-scale 1.0) + (kitty-gfx--image-mode-render)) + (defun kitty-gfx--image-mode-advice (orig-fn &rest args) "Around advice for `image-mode'." (if (and kitty-graphics-mode (not (display-graphic-p))) @@ -874,14 +913,12 @@ image via Kitty graphics instead of an Emacs image spec." (set-keymap-parent map (if (boundp 'image-mode-map) image-mode-map special-mode-map)) (define-key map (kbd "q") #'kill-current-buffer) + (define-key map (kbd "+") #'kitty-gfx-image-increase-size) + (define-key map (kbd "-") #'kitty-gfx-image-decrease-size) + (define-key map (kbd "0") #'kitty-gfx-image-reset-size) (use-local-map map)) (setq-local buffer-read-only t) - (when-let ((file (buffer-file-name))) - (when (kitty-gfx--image-file-p file) - (kitty-gfx-display-image - file (point-min) (point-max) - (min (- (window-body-width) 2) kitty-gfx-max-width) - (min (- (window-body-height) 2) kitty-gfx-max-height)))) + (kitty-gfx--image-mode-render) (run-mode-hooks 'image-mode-hook)) (apply orig-fn args))) |
