annotate lisp/image-mode.el @ 98182:19ec1646fe6c

The Rmail/mbox merge has been abandoned in favor of a restart using the current rmail.el file. A comprehensive list of changes will be supplied when pmail.el is morphed back into rmail.el The current status is that pmail.el supports basic Rmail navigation (no summary support) and shows the current message in a special buffer using buffer-swap-text. No decoding is done yet. That is the next step.
author Paul Reilly <pmr@pajato.com>
date Mon, 15 Sep 2008 20:56:53 +0000
parents ab6494b53df0
children a9dc0e7c3f2b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; image-mode.el --- support for visiting image files
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 ;;
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78625
diff changeset
3 ;; Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 ;;
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Richard Stallman <rms@gnu.org>
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Keywords: multimedia
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93562
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93562
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93562
diff changeset
13 ;; (at your option) any later version.
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93562
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;;; Commentary:
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; Defines a major mode for visiting image files
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;; that allows conversion between viewing the text of the file
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; and viewing the file as an image. Viewing the image
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; works by putting a `display' text-property on the
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; image data, with the image-data still present underneath; if the
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; resulting buffer file is saved to another name it will correctly save
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; the image data to the new file.
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;;; Code:
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 (require 'image)
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
36 (eval-when-compile (require 'cl))
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
38 ;;;###autoload (push '("\\.jpe?g\\'" . image-mode) auto-mode-alist)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
39 ;;;###autoload (push '("\\.png\\'" . image-mode) auto-mode-alist)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
40 ;;;###autoload (push '("\\.gif\\'" . image-mode) auto-mode-alist)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
41 ;;;###autoload (push '("\\.tiff?\\'" . image-mode) auto-mode-alist)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
42 ;;;###autoload (push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist)
82836
4526cbe33367 Add autoloads to put associations in auto-mode-alist:
Juri Linkov <juri@jurta.org>
parents: 82770
diff changeset
43
4526cbe33367 Add autoloads to put associations in auto-mode-alist:
Juri Linkov <juri@jurta.org>
parents: 82770
diff changeset
44 ;;;###autoload (push '("\\.x[bp]m\\'" . c-mode) auto-mode-alist)
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
45 ;;;###autoload (push '("\\.x[bp]m\\'" . image-mode-maybe) auto-mode-alist)
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
82836
4526cbe33367 Add autoloads to put associations in auto-mode-alist:
Juri Linkov <juri@jurta.org>
parents: 82770
diff changeset
47 ;;;###autoload (push '("\\.svgz?\\'" . xml-mode) auto-mode-alist)
4526cbe33367 Add autoloads to put associations in auto-mode-alist:
Juri Linkov <juri@jurta.org>
parents: 82770
diff changeset
48 ;;;###autoload (push '("\\.svgz?\\'" . image-mode-maybe) auto-mode-alist)
4526cbe33367 Add autoloads to put associations in auto-mode-alist:
Juri Linkov <juri@jurta.org>
parents: 82770
diff changeset
49
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
50 ;;; Image mode window-info management.
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
51
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
52 (defvar image-mode-winprops-alist t)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
53 (make-variable-buffer-local 'image-mode-winprops-alist)
88062
4ff20f6b1ec8 * image-mode.el (image-mode-current-vscroll)
Tassilo Horn <tassilo@member.fsf.org>
parents: 88057
diff changeset
54
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
55 (defvar image-mode-new-window-functions nil
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
56 "Special hook run when image data is requested in a new window.
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
57 It is called with one argument, the initial WINPROPS.")
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
58
95224
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
59 (defun image-mode-winprops (&optional window cleanup)
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
60 "Return winprops of WINDOW.
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
61 A winprops object has the shape (WINDOW . ALIST)."
95224
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
62 (cond ((null window)
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
63 (setq window (selected-window)))
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
64 ((not (windowp window))
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
65 (error "Not a window: %s" window)))
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
66 (when cleanup
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
67 (setq image-mode-winprops-alist
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
68 (delq nil (mapcar (lambda (winprop)
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
69 (if (window-live-p (car-safe winprop))
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
70 winprop))
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
71 image-mode-winprops-alist))))
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
72 (let ((winprops (assq window image-mode-winprops-alist)))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
73 ;; For new windows, set defaults from the latest.
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
74 (unless winprops
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
75 (setq winprops (cons window
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
76 (copy-alist (cdar image-mode-winprops-alist))))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
77 (run-hook-with-args 'image-mode-new-window-functions winprops))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
78 ;; Move window to front.
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
79 (setq image-mode-winprops-alist
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
80 (cons winprops (delq winprops image-mode-winprops-alist)))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
81 winprops))
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
82
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
83 (defun image-mode-window-get (prop &optional winprops)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
84 (unless (consp winprops) (setq winprops (image-mode-winprops winprops)))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
85 (cdr (assq prop (cdr winprops))))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
86
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
87 (defsetf image-mode-window-get (prop &optional winprops) (val)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
88 `(image-mode-window-put ,prop ,val ,winprops))
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
89
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
90 (defun image-mode-window-put (prop val &optional winprops)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
91 (unless (consp winprops) (setq winprops (image-mode-winprops winprops)))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
92 (setcdr winprops (cons (cons prop val)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
93 (delq (assq prop (cdr winprops)) (cdr winprops)))))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
94
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
95 (defun image-set-window-vscroll (vscroll)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
96 (setf (image-mode-window-get 'vscroll) vscroll)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
97 (set-window-vscroll (selected-window) vscroll))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
98
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
99 (defun image-set-window-hscroll (ncol)
92010
a7a0e6010c46 (image-set-window-hscroll): Typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91999
diff changeset
100 (setf (image-mode-window-get 'hscroll) ncol)
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
101 (set-window-hscroll (selected-window) ncol))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
102
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
103 (defun image-mode-reapply-winprops ()
93252
d5bb646771f8 (image-mode-reapply-winprops): Simplify now that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92564
diff changeset
104 ;; When set-window-buffer, set hscroll and vscroll to what they were
d5bb646771f8 (image-mode-reapply-winprops): Simplify now that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92564
diff changeset
105 ;; last time the image was displayed in this window.
95224
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
106 (when (and (image-get-display-property)
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
107 (listp image-mode-winprops-alist))
889084703e3f (image-mode-winprops): Add argument CLEANUP to prune
Chong Yidong <cyd@stupidchicken.com>
parents: 94678
diff changeset
108 (let* ((winprops (image-mode-winprops nil t))
93252
d5bb646771f8 (image-mode-reapply-winprops): Simplify now that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92564
diff changeset
109 (hscroll (image-mode-window-get 'hscroll winprops))
d5bb646771f8 (image-mode-reapply-winprops): Simplify now that
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92564
diff changeset
110 (vscroll (image-mode-window-get 'vscroll winprops)))
93315
cb3570d14a66 (image-mode-reapply-winprops): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93252
diff changeset
111 (if hscroll (set-window-hscroll (selected-window) hscroll))
cb3570d14a66 (image-mode-reapply-winprops): Fix last change.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93252
diff changeset
112 (if vscroll (set-window-vscroll (selected-window) vscroll)))))
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
113
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
114 (defun image-mode-setup-winprops ()
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
115 ;; Record current scroll settings.
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
116 (unless (listp image-mode-winprops-alist)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
117 (setq image-mode-winprops-alist nil))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
118 (add-hook 'window-configuration-change-hook
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
119 'image-mode-reapply-winprops nil t))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
120
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
121 ;;; Image scrolling functions
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
122
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
123 (defun image-get-display-property ()
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
124 (get-char-property (point-min) 'display
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
125 ;; There might be different images for different displays.
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
126 (if (eq (window-buffer) (current-buffer))
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
127 (selected-window))))
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
128
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95528
diff changeset
129 (declare-function image-size "image.c" (spec &optional pixels frame))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95528
diff changeset
130
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
131 (defun image-forward-hscroll (&optional n)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
132 "Scroll image in current window to the left by N character widths.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
133 Stop if the right edge of the image is reached."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
134 (interactive "p")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
135 (cond ((= n 0) nil)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
136 ((< n 0)
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
137 (image-set-window-hscroll (max 0 (+ (window-hscroll) n))))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
138 (t
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
139 (let* ((image (image-get-display-property))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
140 (edges (window-inside-edges))
81063
b3fc5c4daa5f (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 81019
diff changeset
141 (win-width (- (nth 2 edges) (nth 0 edges)))
b3fc5c4daa5f (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 81019
diff changeset
142 (img-width (ceiling (car (image-size image)))))
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
143 (image-set-window-hscroll (min (max 0 (- img-width win-width))
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
144 (+ n (window-hscroll))))))))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
145
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
146 (defun image-backward-hscroll (&optional n)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
147 "Scroll image in current window to the right by N character widths.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
148 Stop if the left edge of the image is reached."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
149 (interactive "p")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
150 (image-forward-hscroll (- n)))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
151
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
152 (defun image-next-line (&optional n)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
153 "Scroll image in current window upward by N lines.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
154 Stop if the bottom edge of the image is reached."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
155 (interactive "p")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
156 (cond ((= n 0) nil)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
157 ((< n 0)
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
158 (image-set-window-vscroll (max 0 (+ (window-vscroll) n))))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
159 (t
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
160 (let* ((image (image-get-display-property))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
161 (edges (window-inside-edges))
81063
b3fc5c4daa5f (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 81019
diff changeset
162 (win-height (- (nth 3 edges) (nth 1 edges)))
b3fc5c4daa5f (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 81019
diff changeset
163 (img-height (ceiling (cdr (image-size image)))))
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
164 (image-set-window-vscroll (min (max 0 (- img-height win-height))
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
165 (+ n (window-vscroll))))))))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
166
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
167 (defun image-previous-line (&optional n)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
168 "Scroll image in current window downward by N lines.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
169 Stop if the top edge of the image is reached."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
170 (interactive "p")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
171 (image-next-line (- n)))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
172
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
173 (defun image-scroll-up (&optional n)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
174 "Scroll image in current window upward by N lines.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
175 Stop if the bottom edge of the image is reached.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
176 If ARG is omitted or nil, scroll upward by a near full screen.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
177 A near full screen is `next-screen-context-lines' less than a full screen.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
178 Negative ARG means scroll downward.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
179 If ARG is the atom `-', scroll downward by nearly full screen.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
180 When calling from a program, supply as argument a number, nil, or `-'."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
181 (interactive "P")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
182 (cond ((null n)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
183 (let* ((edges (window-inside-edges))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
184 (win-height (- (nth 3 edges) (nth 1 edges))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
185 (image-next-line
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
186 (max 0 (- win-height next-screen-context-lines)))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
187 ((eq n '-)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
188 (let* ((edges (window-inside-edges))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
189 (win-height (- (nth 3 edges) (nth 1 edges))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
190 (image-next-line
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
191 (min 0 (- next-screen-context-lines win-height)))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
192 (t (image-next-line (prefix-numeric-value n)))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
193
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
194 (defun image-scroll-down (&optional n)
88103
d6247c939edc (image-mode-current-vscroll, image-mode-current-hscroll): Make buffer-local.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88062
diff changeset
195 "Scroll image in current window downward by N lines.
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
196 Stop if the top edge of the image is reached.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
197 If ARG is omitted or nil, scroll downward by a near full screen.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
198 A near full screen is `next-screen-context-lines' less than a full screen.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
199 Negative ARG means scroll upward.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
200 If ARG is the atom `-', scroll upward by nearly full screen.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
201 When calling from a program, supply as argument a number, nil, or `-'."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
202 (interactive "P")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
203 (cond ((null n)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
204 (let* ((edges (window-inside-edges))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
205 (win-height (- (nth 3 edges) (nth 1 edges))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
206 (image-next-line
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
207 (min 0 (- next-screen-context-lines win-height)))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
208 ((eq n '-)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
209 (let* ((edges (window-inside-edges))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
210 (win-height (- (nth 3 edges) (nth 1 edges))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
211 (image-next-line
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
212 (max 0 (- win-height next-screen-context-lines)))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
213 (t (image-next-line (- (prefix-numeric-value n))))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
214
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
215 (defun image-bol (arg)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
216 "Scroll horizontally to the left edge of the image in the current window.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
217 With argument ARG not nil or 1, move forward ARG - 1 lines first,
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
218 stopping if the top or bottom edge of the image is reached."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
219 (interactive "p")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
220 (and arg
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
221 (/= (setq arg (prefix-numeric-value arg)) 1)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
222 (image-next-line (- arg 1)))
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
223 (image-set-window-hscroll 0))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
224
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
225 (defun image-eol (arg)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
226 "Scroll horizontally to the right edge of the image in the current window.
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
227 With argument ARG not nil or 1, move forward ARG - 1 lines first,
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
228 stopping if the top or bottom edge of the image is reached."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
229 (interactive "p")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
230 (and arg
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
231 (/= (setq arg (prefix-numeric-value arg)) 1)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
232 (image-next-line (- arg 1)))
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
233 (let* ((image (image-get-display-property))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
234 (edges (window-inside-edges))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
235 (win-width (- (nth 2 edges) (nth 0 edges)))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
236 (img-width (ceiling (car (image-size image)))))
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
237 (image-set-window-hscroll (max 0 (- img-width win-width)))))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
238
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
239 (defun image-bob ()
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
240 "Scroll to the top-left corner of the image in the current window."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
241 (interactive)
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
242 (image-set-window-hscroll 0)
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
243 (image-set-window-vscroll 0))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
244
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
245 (defun image-eob ()
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
246 "Scroll to the bottom-right corner of the image in the current window."
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
247 (interactive)
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
248 (let* ((image (image-get-display-property))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
249 (edges (window-inside-edges))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
250 (win-width (- (nth 2 edges) (nth 0 edges)))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
251 (img-width (ceiling (car (image-size image))))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
252 (win-height (- (nth 3 edges) (nth 1 edges)))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
253 (img-height (ceiling (cdr (image-size image)))))
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
254 (image-set-window-hscroll (max 0 (- img-width win-width)))
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
255 (image-set-window-vscroll (max 0 (- img-height win-height)))))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
256
93562
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
257 ;; Adjust frame and image size.
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
258
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
259 (defun image-mode-fit-frame ()
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
260 "Fit the frame to the current image.
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
261 This function assumes the current frame has only one window."
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
262 ;; FIXME: This does not take into account decorations like mode-line,
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
263 ;; minibuffer, header-line, ...
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
264 (interactive)
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
265 (let* ((saved (frame-parameter nil 'image-mode-saved-size))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
266 (display (image-get-display-property))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
267 (size (image-size display)))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
268 (if (and saved
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
269 (eq (caar saved) (frame-width))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
270 (eq (cdar saved) (frame-height)))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
271 (progn ;; Toggle back to previous non-fitted size.
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
272 (set-frame-parameter nil 'image-mode-saved-size nil)
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
273 (setq size (cdr saved)))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
274 ;; Round up size, and save current size so we can toggle back to it.
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
275 (setcar size (ceiling (car size)))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
276 (setcdr size (ceiling (cdr size)))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
277 (set-frame-parameter nil 'image-mode-saved-size
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
278 (cons size (cons (frame-width) (frame-height)))))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
279 (set-frame-width (selected-frame) (car size))
01f16f0a9645 (image-mode-fit-frame): New command.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93315
diff changeset
280 (set-frame-height (selected-frame) (cdr size))))
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
281
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
282 ;;; Image Mode setup
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
283
82944
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
284 (defvar image-type nil
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
285 "Current image type.
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
286 This variable is used to display the current image type in the mode line.")
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
287 (make-variable-buffer-local 'image-type)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
288
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (defvar image-mode-map
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 (let ((map (make-sparse-keymap)))
95508
88781ac6a1be * image-mode.el (image-mode-map): Suppress key map and bind `q'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95224
diff changeset
291 (suppress-keymap map)
88781ac6a1be * image-mode.el (image-mode-map): Suppress key map and bind `q'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95224
diff changeset
292 (define-key map "q" 'quit-window)
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (define-key map "\C-c\C-c" 'image-toggle-display)
95528
40ef1e044cad (image-mode-map): Add doc-view-inspired bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95508
diff changeset
294 (define-key map (kbd "SPC") 'image-scroll-up)
40ef1e044cad (image-mode-map): Add doc-view-inspired bindings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95508
diff changeset
295 (define-key map (kbd "DEL") 'image-scroll-down)
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
296 (define-key map [remap forward-char] 'image-forward-hscroll)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
297 (define-key map [remap backward-char] 'image-backward-hscroll)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
298 (define-key map [remap previous-line] 'image-previous-line)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
299 (define-key map [remap next-line] 'image-next-line)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
300 (define-key map [remap scroll-up] 'image-scroll-up)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
301 (define-key map [remap scroll-down] 'image-scroll-down)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
302 (define-key map [remap move-beginning-of-line] 'image-bol)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
303 (define-key map [remap move-end-of-line] 'image-eol)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
304 (define-key map [remap beginning-of-buffer] 'image-bob)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
305 (define-key map [remap end-of-buffer] 'image-eob)
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 map)
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
307 "Major mode keymap for viewing images in Image mode.")
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
308
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
309 (defvar image-mode-text-map
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
310 (let ((map (make-sparse-keymap)))
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
311 (define-key map "\C-c\C-c" 'image-toggle-display)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
312 map)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
313 "Major mode keymap for viewing images as text in Image mode.")
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314
92556
5944be8c8211 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 92010
diff changeset
315 (defvar bookmark-make-record-function)
87557
9ada3b121e1f (bookmark-make-cell-function)
Glenn Morris <rgm@gnu.org>
parents: 87521
diff changeset
316
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 ;;;###autoload
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (defun image-mode ()
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 "Major mode for image files.
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 You can use \\<image-mode-map>\\[image-toggle-display]
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 to toggle between display as an image and display as text."
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (interactive)
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 (kill-all-local-variables)
82944
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
324 (setq mode-name "Image[text]")
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 (setq major-mode 'image-mode)
87412
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
326 ;; Use our own bookmarking function for images.
92556
5944be8c8211 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 92010
diff changeset
327 (set (make-local-variable 'bookmark-make-record-function)
5944be8c8211 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 92010
diff changeset
328 'image-bookmark-make-record)
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
329
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
330 ;; Keep track of [vh]scroll when switching buffers
91999
a58e06f6236c Extend [hv]scroll support to per-window properties.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91928
diff changeset
331 (image-mode-setup-winprops)
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
332
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
333 (add-hook 'change-major-mode-hook 'image-toggle-display-text nil t)
80655
bfcd3905d0e4 (image-mode): Set image-mode-text-map when image cannot be displayed.
Chong Yidong <cyd@stupidchicken.com>
parents: 79721
diff changeset
334 (if (display-images-p)
80768
5b546e629ab2 (image-mode): Fix 2008-07-19 change.
Chong Yidong <cyd@stupidchicken.com>
parents: 80655
diff changeset
335 (if (not (get-text-property (point-min) 'display))
80655
bfcd3905d0e4 (image-mode): Set image-mode-text-map when image cannot be displayed.
Chong Yidong <cyd@stupidchicken.com>
parents: 79721
diff changeset
336 (image-toggle-display)
bfcd3905d0e4 (image-mode): Set image-mode-text-map when image cannot be displayed.
Chong Yidong <cyd@stupidchicken.com>
parents: 79721
diff changeset
337 ;; Set next vars when image is already displayed but local
bfcd3905d0e4 (image-mode): Set image-mode-text-map when image cannot be displayed.
Chong Yidong <cyd@stupidchicken.com>
parents: 79721
diff changeset
338 ;; variables were cleared by kill-all-local-variables
bfcd3905d0e4 (image-mode): Set image-mode-text-map when image cannot be displayed.
Chong Yidong <cyd@stupidchicken.com>
parents: 79721
diff changeset
339 (use-local-map image-mode-map)
bfcd3905d0e4 (image-mode): Set image-mode-text-map when image cannot be displayed.
Chong Yidong <cyd@stupidchicken.com>
parents: 79721
diff changeset
340 (setq cursor-type nil truncate-lines t))
bfcd3905d0e4 (image-mode): Set image-mode-text-map when image cannot be displayed.
Chong Yidong <cyd@stupidchicken.com>
parents: 79721
diff changeset
341 (use-local-map image-mode-text-map))
72570
7011a586dd45 * image-mode.el (image-mode): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 72568
diff changeset
342 (run-mode-hooks 'image-mode-hook)
7011a586dd45 * image-mode.el (image-mode): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 72568
diff changeset
343 (if (display-images-p)
7011a586dd45 * image-mode.el (image-mode): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 72568
diff changeset
344 (message "%s" (concat
7011a586dd45 * image-mode.el (image-mode): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 72568
diff changeset
345 (substitute-command-keys
75545
4f14c21e4f44 (image-mode): Don't automatically view as image.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
346 "Type \\[image-toggle-display] to view as ")
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
347 (if (image-get-display-property)
72570
7011a586dd45 * image-mode.el (image-mode): Fix last fix.
Chong Yidong <cyd@stupidchicken.com>
parents: 72568
diff changeset
348 "text" "an image") "."))))
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
349
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
350 ;;;###autoload
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
351 (define-minor-mode image-minor-mode
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
352 "Toggle Image minor mode.
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
353 With arg, turn Image minor mode on if arg is positive, off otherwise.
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
354 See the command `image-mode' for more information on this mode."
82944
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
355 nil (:eval (format " Image[%s]" image-type)) image-mode-text-map
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
356 :group 'image
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
357 :version "22.1"
60943
258772850c9a (image-minor-mode): Set `cursor-type' and `truncate-lines' if the
Juri Linkov <juri@jurta.org>
parents: 60937
diff changeset
358 (if (not image-minor-mode)
258772850c9a (image-minor-mode): Set `cursor-type' and `truncate-lines' if the
Juri Linkov <juri@jurta.org>
parents: 60937
diff changeset
359 (image-toggle-display-text)
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
360 (if (image-get-display-property)
82944
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
361 (setq cursor-type nil truncate-lines t)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
362 (setq image-type "text"))
97001
a549971e6b11 (image-minor-mode): Set up winprops.
Chong Yidong <cyd@stupidchicken.com>
parents: 96319
diff changeset
363 (image-mode-setup-winprops)
60943
258772850c9a (image-minor-mode): Set `cursor-type' and `truncate-lines' if the
Juri Linkov <juri@jurta.org>
parents: 60937
diff changeset
364 (add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t)
65582
4d1085b02d64 Message format spec fixes (1)
Deepak Goel <deego@gnufans.org>
parents: 64091
diff changeset
365 (message "%s" (concat (substitute-command-keys
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
366 "Type \\[image-toggle-display] to view the image as ")
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
367 (if (image-get-display-property)
88057
1341d54b08e2 2008-01-29 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 87557
diff changeset
368 "text" "an image") "."))))
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
369
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
370 ;;;###autoload
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
371 (defun image-mode-maybe ()
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
372 "Set major or minor mode for image files.
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
373 Set Image major mode only when there are no other major modes
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
374 associated with a filename in `auto-mode-alist'. When an image
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
375 filename matches another major mode in `auto-mode-alist' then
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
376 set that major mode and Image minor mode.
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
377
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
378 See commands `image-mode' and `image-minor-mode' for more
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
379 information on these modes."
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
380 (interactive)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
381 (let* ((mode-alist
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
382 (delq nil (mapcar
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
383 (lambda (elt)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
384 (unless (memq (or (car-safe (cdr elt)) (cdr elt))
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
385 '(image-mode image-mode-maybe))
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
386 elt))
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
387 auto-mode-alist))))
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
388 (if (assoc-default buffer-file-name mode-alist 'string-match)
75568
146ba0f8974c (image-mode-maybe): Prevent magic-mode-alist from
Jason Rumney <jasonr@gnu.org>
parents: 75547
diff changeset
389 (let ((auto-mode-alist mode-alist)
146ba0f8974c (image-mode-maybe): Prevent magic-mode-alist from
Jason Rumney <jasonr@gnu.org>
parents: 75547
diff changeset
390 (magic-mode-alist nil))
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
391 (set-auto-mode)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
392 (image-minor-mode t))
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
393 (image-mode))))
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
394
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
395 (defun image-toggle-display-text ()
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
396 "Showing the text of the image file."
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
397 (if (image-get-display-property)
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
398 (image-toggle-display)))
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399
71939
3c0fceee4b4a (tar-superior-buffer, archive-superior-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 70943
diff changeset
400 (defvar archive-superior-buffer)
3c0fceee4b4a (tar-superior-buffer, archive-superior-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 70943
diff changeset
401 (defvar tar-superior-buffer)
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 95528
diff changeset
402 (declare-function image-refresh "image.c" (spec &optional frame))
71939
3c0fceee4b4a (tar-superior-buffer, archive-superior-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 70943
diff changeset
403
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (defun image-toggle-display ()
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 "Start or stop displaying an image file as the actual image.
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 This command toggles between showing the text of the image file
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 and showing the image as an image."
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (interactive)
91928
e788f311729d (image-get-display-property): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 88103
diff changeset
409 (if (image-get-display-property)
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (let ((inhibit-read-only t)
60780
391ee1dd9e7a Handle .xpm files too.
Richard M. Stallman <rms@gnu.org>
parents: 60697
diff changeset
411 (buffer-undo-list t)
391ee1dd9e7a Handle .xpm files too.
Richard M. Stallman <rms@gnu.org>
parents: 60697
diff changeset
412 (modified (buffer-modified-p)))
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (remove-list-of-text-properties (point-min) (point-max)
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 '(display intangible read-nonsticky
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 read-only front-sticky))
60780
391ee1dd9e7a Handle .xpm files too.
Richard M. Stallman <rms@gnu.org>
parents: 60697
diff changeset
416 (set-buffer-modified-p modified)
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (kill-local-variable 'cursor-type)
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (kill-local-variable 'truncate-lines)
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
419 (kill-local-variable 'auto-hscroll-mode)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
420 (use-local-map image-mode-text-map)
82944
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
421 (setq image-type "text")
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
422 (if (eq major-mode 'image-mode)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
423 (setq mode-name "Image[text]"))
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
424 (if (called-interactively-p)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
425 (message "Repeat this command to go back to displaying the image")))
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 ;; Turn the image data into a real image, but only if the whole file
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 ;; was inserted
78452
8a8bca3342bc (image-toggle-display): Use image-refresh.
Chong Yidong <cyd@stupidchicken.com>
parents: 78236
diff changeset
428 (let* ((filename (buffer-file-name))
82944
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
429 (data-p (not (and filename
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
430 (file-readable-p filename)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
431 (not (file-remote-p filename))
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
432 (not (buffer-modified-p))
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
433 (not (and (boundp 'archive-superior-buffer)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
434 archive-superior-buffer))
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
435 (not (and (boundp 'tar-superior-buffer)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
436 tar-superior-buffer)))))
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
437 (file-or-data (if data-p
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
438 (string-make-unibyte
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
439 (buffer-substring-no-properties (point-min) (point-max)))
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
440 filename))
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
441 (type (image-type file-or-data nil data-p))
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
442 (image (create-image file-or-data type data-p))
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (props
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 `(display ,image
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 intangible ,image
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 rear-nonsticky (display intangible)
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 read-only t front-sticky (read-only)))
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
448 (inhibit-read-only t)
60780
391ee1dd9e7a Handle .xpm files too.
Richard M. Stallman <rms@gnu.org>
parents: 60697
diff changeset
449 (buffer-undo-list t)
391ee1dd9e7a Handle .xpm files too.
Richard M. Stallman <rms@gnu.org>
parents: 60697
diff changeset
450 (modified (buffer-modified-p)))
78452
8a8bca3342bc (image-toggle-display): Use image-refresh.
Chong Yidong <cyd@stupidchicken.com>
parents: 78236
diff changeset
451 (image-refresh image)
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (add-text-properties (point-min) (point-max) props)
60780
391ee1dd9e7a Handle .xpm files too.
Richard M. Stallman <rms@gnu.org>
parents: 60697
diff changeset
453 (set-buffer-modified-p modified)
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 ;; Inhibit the cursor when the buffer contains only an image,
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ;; because cursors look very strange on top of images.
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 (setq cursor-type nil)
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 ;; This just makes the arrow displayed in the right fringe
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 ;; area look correct when the image is wider than the window.
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 (setq truncate-lines t)
77989
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
460 ;; Allow navigation of large images
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
461 (set (make-local-variable 'auto-hscroll-mode) nil)
6393038dae4d (image-forward-hscroll, image-backward-hscroll)
Chong Yidong <cyd@stupidchicken.com>
parents: 75745
diff changeset
462 (use-local-map image-mode-map)
82944
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
463 (setq image-type type)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
464 (if (eq major-mode 'image-mode)
827101d5eacc (image-type): New variable.
Juri Linkov <juri@jurta.org>
parents: 82836
diff changeset
465 (setq mode-name (format "Image[%s]" type)))
60937
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
466 (if (called-interactively-p)
ddcbccff39ce Optimize image filename extension regexps in
Juri Linkov <juri@jurta.org>
parents: 60780
diff changeset
467 (message "Repeat this command to go back to displaying the file as text")))))
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468
87412
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
469 ;;; Support for bookmark.el
96319
92bcd46a6ca9 (bookmark-make-record-default): Fix declaration.
Glenn Morris <rgm@gnu.org>
parents: 96280
diff changeset
470 (declare-function bookmark-make-record-default "bookmark"
92bcd46a6ca9 (bookmark-make-record-default): Fix declaration.
Glenn Morris <rgm@gnu.org>
parents: 96280
diff changeset
471 (&optional point-only))
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
472 (declare-function bookmark-prop-get "bookmark" (bookmark prop))
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
473 (declare-function bookmark-default-handler "bookmark" (bmk))
87412
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
474
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
475 (defun image-bookmark-make-record ()
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
476 (nconc (bookmark-make-record-default)
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
477 `((image-type . ,image-type)
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
478 (handler . image-bookmark-jump))))
87412
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
479
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
480
87557
9ada3b121e1f (bookmark-make-cell-function)
Glenn Morris <rgm@gnu.org>
parents: 87521
diff changeset
481
87412
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
482 ;;;###autoload
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
483 (defun image-bookmark-jump (bmk)
87521
0140d3ebb262 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 87412
diff changeset
484 ;; This implements the `handler' function interface for record type
92556
5944be8c8211 Change a return type, for greater extensibility. See
Karl Fogel <kfogel@red-bean.com>
parents: 92010
diff changeset
485 ;; returned by `bookmark-make-record-function', which see.
96280
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
486 (prog1 (bookmark-default-handler bmk)
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
487 (when (not (string= image-type (bookmark-prop-get bmk 'image-type)))
bfca3297fa0b * bookmark.el (bookmark-alist): Allow the 2 slightly different formats
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 95841
diff changeset
488 (image-toggle-display))))
87412
f6ce12419345 2007-12-26 Tassilo Horn <tassilo@member.fsf.org>
Tassilo Horn <tassilo@member.fsf.org>
parents: 85800
diff changeset
489
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 (provide 'image-mode)
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491
60697
d9c9ad74e719 Changes from arch/CVS synchronization
Miles Bader <miles@gnu.org>
parents: 60694
diff changeset
492 ;; arch-tag: b5b2b7e6-26a7-4b79-96e3-1546b5c4c6cb
60694
9e7ee067df09 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 ;;; image-mode.el ends here