X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/142e26a72e9b8bbbec23c6bf7234e9f2544b5f89..ccd7dc02ccf67aede7b4dbce4f00bbc4ea98a9c2:/lisp/image-mode.el diff --git a/lisp/image-mode.el b/lisp/image-mode.el index 9cfc734daa..b751652267 100644 --- a/lisp/image-mode.el +++ b/lisp/image-mode.el @@ -1,6 +1,6 @@ ;;; image-mode.el --- support for visiting image files ;; -;; Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. ;; ;; Author: Richard Stallman ;; Keywords: multimedia @@ -126,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." @@ -286,7 +288,11 @@ 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) @@ -315,7 +321,6 @@ You can use \\\\[image-toggle-display] to toggle between display as an image and display as text." (interactive) (kill-all-local-variables) - (setq mode-name "Image[text]") (setq major-mode 'image-mode) ;; Use our own bookmarking function for images. (set (make-local-variable 'bookmark-make-record-function) @@ -325,13 +330,17 @@ to toggle between display as an image and display as text." (image-mode-setup-winprops) (add-hook 'change-major-mode-hook 'image-toggle-display-text nil t) - (if (and (display-images-p) - (not (image-get-display-property))) - (image-toggle-display) - ;; Set next vars when image is already displayed but local - ;; variables were cleared by kill-all-local-variables - (use-local-map image-mode-map) - (setq cursor-type nil truncate-lines t)) + (if (display-images-p) + (if (not (image-get-display-property)) + (image-toggle-display) + ;; Set next vars when image is already displayed but local + ;; variables were cleared by kill-all-local-variables + (use-local-map image-mode-map) + (setq cursor-type nil truncate-lines t + image-type (plist-get (cdr (image-get-display-property)) :type))) + (setq image-type "text") + (use-local-map image-mode-text-map)) + (setq mode-name (format "Image[%s]" image-type)) (run-mode-hooks 'image-mode-hook) (if (display-images-p) (message "%s" (concat @@ -350,14 +359,21 @@ See the command `image-mode' for more information on this mode." :version "22.1" (if (not image-minor-mode) (image-toggle-display-text) - (if (image-get-display-property) - (setq cursor-type nil truncate-lines t) - (setq image-type "text")) + (image-mode-setup-winprops) (add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t) - (message "%s" (concat (substitute-command-keys - "Type \\[image-toggle-display] to view the image as ") - (if (image-get-display-property) - "text" "an image") ".")))) + (if (display-images-p) + (if (not (image-get-display-property)) + (image-toggle-display) + (setq cursor-type nil truncate-lines t + image-type (plist-get (cdr (image-get-display-property)) :type))) + (setq image-type "text") + (use-local-map image-mode-text-map)) + (if (display-images-p) + (message "%s" (concat + (substitute-command-keys + "Type \\[image-toggle-display] to view the image as ") + (if (image-get-display-property) + "text" "an image") "."))))) ;;;###autoload (defun image-mode-maybe () @@ -391,6 +407,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. @@ -440,8 +457,9 @@ and showing the image as an image." (buffer-undo-list t) (modified (buffer-modified-p))) (image-refresh image) - (add-text-properties (point-min) (point-max) props) - (set-buffer-modified-p modified) + (let ((buffer-file-truename nil)) ; avoid changing dir mtime by lock_file + (add-text-properties (point-min) (point-max) props) + (restore-buffer-modified-p modified)) ;; Inhibit the cursor when the buffer contains only an image, ;; because cursors look very strange on top of images. (setq cursor-type nil) @@ -456,44 +474,26 @@ and showing the image as an image." (setq mode-name (format "Image[%s]" type))) (if (called-interactively-p) (message "Repeat this command to go back to displaying the file as text"))))) - + ;;; Support for bookmark.el +(declare-function bookmark-make-record-default "bookmark" + (&optional point-only)) +(declare-function bookmark-prop-get "bookmark" (bookmark prop)) +(declare-function bookmark-default-handler "bookmark" (bmk)) -(defun image-bookmark-make-record (annotation) - (let ((the-record - `((filename . ,(buffer-file-name)) - (image-type . ,image-type) - (position . ,(point)) - (handler . image-bookmark-jump)))) - - ;; Take no chances with text properties - (set-text-properties 0 (length annotation) nil annotation) - - (when annotation - (nconc the-record (list (cons 'annotation annotation)))) - - ;; Finally, return the completed record. - the-record)) - -(declare-function bookmark-get-filename "bookmark" (bookmark)) -(declare-function bookmark-get-bookmark-record "bookmark" (bookmark)) -(declare-function bookmark-get-position "bookmark" (bookmark)) +(defun image-bookmark-make-record () + (nconc (bookmark-make-record-default) + `((image-type . ,image-type) + (handler . image-bookmark-jump)))) ;;;###autoload (defun image-bookmark-jump (bmk) ;; This implements the `handler' function interface for record type ;; returned by `bookmark-make-record-function', which see. - (save-window-excursion - (let ((filename (bookmark-get-filename bmk)) - (type (cdr (assq 'image-type (bookmark-get-bookmark-record bmk)))) - (pos (bookmark-get-position bmk))) - (find-file filename) - (when (not (string= image-type type)) - (image-toggle-display)) - (when (string= image-type "text") - (goto-char pos)) - `((buffer ,(current-buffer)) (position ,(point)))))) - + (prog1 (bookmark-default-handler bmk) + (when (not (string= image-type (bookmark-prop-get bmk 'image-type))) + (image-toggle-display)))) + (provide 'image-mode) ;; arch-tag: b5b2b7e6-26a7-4b79-96e3-1546b5c4c6cb