X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/f67e15be8d94718b2e2ea7da68eb0b2dc94ce016..2b96868715a33d5c1bfbd03e961a222076398722:/lisp/image-mode.el diff --git a/lisp/image-mode.el b/lisp/image-mode.el index 2fe1cdc88e..dbedf64156 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el @@ -7,10 +7,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -18,9 +18,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -58,10 +56,19 @@ "Special hook run when image data is requested in a new window. It is called with one argument, the initial WINPROPS.") -(defun image-mode-winprops (&optional window) +(defun image-mode-winprops (&optional window cleanup) "Return winprops of WINDOW. A winprops object has the shape (WINDOW . ALIST)." - (unless window (setq window (selected-window))) + (cond ((null window) + (setq window (selected-window))) + ((not (windowp window)) + (error "Not a window: %s" window))) + (when cleanup + (setq image-mode-winprops-alist + (delq nil (mapcar (lambda (winprop) + (if (window-live-p (car-safe winprop)) + winprop)) + image-mode-winprops-alist)))) (let ((winprops (assq window image-mode-winprops-alist))) ;; For new windows, set defaults from the latest. (unless winprops @@ -96,8 +103,9 @@ A winprops object has the shape (WINDOW . ALIST)." (defun image-mode-reapply-winprops () ;; When set-window-buffer, set hscroll and vscroll to what they were ;; last time the image was displayed in this window. - (when (listp image-mode-winprops-alist) - (let* ((winprops (image-mode-winprops)) + (when (and (image-get-display-property) + (listp image-mode-winprops-alist)) + (let* ((winprops (image-mode-winprops nil t)) (hscroll (image-mode-window-get 'hscroll winprops)) (vscroll (image-mode-window-get 'vscroll winprops))) (if hscroll (set-window-hscroll (selected-window) hscroll)) @@ -118,6 +126,8 @@ A winprops object has the shape (WINDOW . ALIST)." (if (eq (window-buffer) (current-buffer)) (selected-window)))) +(declare-function image-size "image.c" (spec &optional pixels frame)) + (defun image-forward-hscroll (&optional n) "Scroll image in current window to the left by N character widths. Stop if the right edge of the image is reached." @@ -278,7 +288,13 @@ This variable is used to display the current image type in the mode line.") (defvar image-mode-map (let ((map (make-sparse-keymap))) + (suppress-keymap map) + (define-key map "q" 'quit-window) + ;; (define-key map "\C-c\C-c" 'image-toggle-display) + (define-key map (kbd "SPC") 'image-scroll-up) + (define-key map (kbd "DEL") 'image-scroll-down) + ;; (define-key map [remap forward-char] 'image-forward-hscroll) (define-key map [remap backward-char] 'image-backward-hscroll) (define-key map [remap previous-line] 'image-previous-line) @@ -383,6 +399,7 @@ information on these modes." (defvar archive-superior-buffer) (defvar tar-superior-buffer) +(declare-function image-refresh "image.c" (spec &optional frame)) (defun image-toggle-display () "Start or stop displaying an image file as the actual image.