annotate lisp/image-file.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 1d1d5d9bd884
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42558
4a1e3c7e7dd1 Fix spelling in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 42141
diff changeset
1 ;;; image-file.el --- support for visiting image files
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
2 ;;
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64594
diff changeset
3 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105870
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
5 ;;
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
6 ;; Author: Miles Bader <miles@gnu.org>
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
7 ;; Keywords: multimedia
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
8
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
12 ;; 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: 93975
diff changeset
13 ;; 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: 93975
diff changeset
14 ;; (at your option) any later version.
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
15
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
20
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
21 ;; 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: 93975
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
23
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
25
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
26 ;; Defines a file-name-handler hook that transforms visited (or
42558
4a1e3c7e7dd1 Fix spelling in comments.
Pavel Janík <Pavel@Janik.cz>
parents: 42141
diff changeset
27 ;; inserted) image files so that they are displayed by Emacs as
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
28 ;; images. This is done by putting a `display' text-property on the
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
29 ;; image data, with the image-data still present underneath; if the
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
30 ;; resulting buffer file is saved to another name it will correctly save
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
31 ;; the image data to the new file.
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
32
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
33 ;;; Code:
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
34
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
35 (require 'image)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
36
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
37
32440
4e98e54082d2 (image-file-name-extensions, image-file-name-regexps): Add autoload cookies.
Miles Bader <miles@gnu.org>
parents: 32316
diff changeset
38 ;;;###autoload
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
39 (defcustom image-file-name-extensions
105870
26baacb565b0 * textmodes/tex-mode.el (tex-alt-dvi-print-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100908
diff changeset
40 (purecopy '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm" "svg"))
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
41 "A list of image-file filename extensions.
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
42 Filenames having one of these extensions are considered image files,
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
43 in addition to those matching `image-file-name-regexps'.
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
44
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
45 See `auto-image-file-mode'; if `auto-image-file-mode' is enabled,
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
46 setting this variable directly does not take effect unless
42141
55c0ac959234 (image-file-name-extensions): Add pnm. Doc fix.
Dave Love <fx@gnu.org>
parents: 36213
diff changeset
47 `auto-image-file-mode' is re-enabled; this happens automatically when
55c0ac959234 (image-file-name-extensions): Add pnm. Doc fix.
Dave Love <fx@gnu.org>
parents: 36213
diff changeset
48 the variable is set using \\[customize]."
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
49 :type '(repeat string)
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
50 :set (lambda (sym val)
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
51 (set-default sym val)
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
52 (when auto-image-file-mode
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
53 ;; Re-initialize the image-file handler
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
54 (auto-image-file-mode t)))
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
55 :initialize 'custom-initialize-default
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
56 :group 'image)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
57
32440
4e98e54082d2 (image-file-name-extensions, image-file-name-regexps): Add autoload cookies.
Miles Bader <miles@gnu.org>
parents: 32316
diff changeset
58 ;;;###autoload
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
59 (defcustom image-file-name-regexps nil
100171
d42aff5ca541 * align.el:
Lute Kamstra <lute@gnu.org>
parents: 94678
diff changeset
60 "List of regexps matching image-file filenames.
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
61 Filenames matching one of these regexps are considered image files,
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
62 in addition to those with an extension in `image-file-name-extensions'.
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
63
32220
3c7e4ccb6fee (image-file-name-extensions): Add pbm.
Dave Love <fx@gnu.org>
parents: 32218
diff changeset
64 See function `auto-image-file-mode'; if `auto-image-file-mode' is
3c7e4ccb6fee (image-file-name-extensions): Add pbm.
Dave Love <fx@gnu.org>
parents: 32218
diff changeset
65 enabled, setting this variable directly does not take effect unless
42141
55c0ac959234 (image-file-name-extensions): Add pnm. Doc fix.
Dave Love <fx@gnu.org>
parents: 36213
diff changeset
66 `auto-image-file-mode' is re-enabled; this happens automatically when
55c0ac959234 (image-file-name-extensions): Add pnm. Doc fix.
Dave Love <fx@gnu.org>
parents: 36213
diff changeset
67 the variable is set using \\[customize]."
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
68 :type '(repeat regexp)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
69 :set (lambda (sym val)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
70 (set-default sym val)
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
71 (when auto-image-file-mode
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
72 ;; Re-initialize the image-file handler
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
73 (auto-image-file-mode t)))
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
74 :initialize 'custom-initialize-default
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
75 :group 'image)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
76
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
77
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
78 ;;;###autoload
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
79 (defun image-file-name-regexp ()
32185
f7460e78c02a Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32003
diff changeset
80 "Return a regular expression matching image-file filenames."
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
81 (let ((exts-regexp
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
82 (and image-file-name-extensions
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
83 (concat "\\."
34074
89fcace178df (image-file-name-regexp): Automatically add upper-case variants of each
Miles Bader <miles@gnu.org>
parents: 33727
diff changeset
84 (regexp-opt (nconc (mapcar #'upcase
89fcace178df (image-file-name-regexp): Automatically add upper-case variants of each
Miles Bader <miles@gnu.org>
parents: 33727
diff changeset
85 image-file-name-extensions)
89fcace178df (image-file-name-regexp): Automatically add upper-case variants of each
Miles Bader <miles@gnu.org>
parents: 33727
diff changeset
86 image-file-name-extensions)
89fcace178df (image-file-name-regexp): Automatically add upper-case variants of each
Miles Bader <miles@gnu.org>
parents: 33727
diff changeset
87 t)
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
88 "\\'"))))
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
89 (if image-file-name-regexps
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
90 (mapconcat 'identity
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
91 (if exts-regexp
32218
65d06b88701d (image-file-name-regexp): image-file-regexps -> image-file-name-regexps.
Dave Love <fx@gnu.org>
parents: 32185
diff changeset
92 (cons exts-regexp image-file-name-regexps)
65d06b88701d (image-file-name-regexp): image-file-regexps -> image-file-name-regexps.
Dave Love <fx@gnu.org>
parents: 32185
diff changeset
93 image-file-name-regexps)
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
94 "\\|")
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
95 exts-regexp)))
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
96
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
97
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
98 ;;;###autoload
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
99 (defun insert-image-file (file &optional visit beg end replace)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
100 "Insert the image file FILE into the current buffer.
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
101 Optional arguments VISIT, BEG, END, and REPLACE are interpreted as for
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
102 the command `insert-file-contents'."
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
103 (let ((rval
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
104 (image-file-call-underlying #'insert-file-contents-literally
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
105 'insert-file-contents
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
106 file visit beg end replace)))
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
107 ;; Turn the image data into a real image, but only if the whole file
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
108 ;; was inserted
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
109 (when (and (or (null beg) (zerop beg)) (null end))
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
110 (let* ((ibeg (point))
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
111 (iend (+ (point) (cadr rval)))
35854
a8fd9112792b (insert-image-file): When visiting an image, suppress the cursor in the
Miles Bader <miles@gnu.org>
parents: 34650
diff changeset
112 (visitingp (and visit (= ibeg (point-min)) (= iend (point-max))))
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
113 (data
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
114 (string-make-unibyte
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
115 (buffer-substring-no-properties ibeg iend)))
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
116 (image
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
117 (create-image data nil t))
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
118 (props
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
119 `(display ,image
64594
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
120 yank-handler
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
121 (image-file-yank-handler nil t)
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
122 intangible ,image
33727
242c7cbf0a6b (insert-image-file): Don't make `read-only' property rear-nonsticky.
Miles Bader <miles@gnu.org>
parents: 33608
diff changeset
123 rear-nonsticky (display intangible)
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
124 ;; This a cheap attempt to make the whole buffer
33727
242c7cbf0a6b (insert-image-file): Don't make `read-only' property rear-nonsticky.
Miles Bader <miles@gnu.org>
parents: 33608
diff changeset
125 ;; read-only when we're visiting the file (as
242c7cbf0a6b (insert-image-file): Don't make `read-only' property rear-nonsticky.
Miles Bader <miles@gnu.org>
parents: 33608
diff changeset
126 ;; opposed to just inserting it).
35854
a8fd9112792b (insert-image-file): When visiting an image, suppress the cursor in the
Miles Bader <miles@gnu.org>
parents: 34650
diff changeset
127 ,@(and visitingp
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
128 '(read-only t front-sticky (read-only))))))
35854
a8fd9112792b (insert-image-file): When visiting an image, suppress the cursor in the
Miles Bader <miles@gnu.org>
parents: 34650
diff changeset
129 (add-text-properties ibeg iend props)
a8fd9112792b (insert-image-file): When visiting an image, suppress the cursor in the
Miles Bader <miles@gnu.org>
parents: 34650
diff changeset
130 (when visitingp
a8fd9112792b (insert-image-file): When visiting an image, suppress the cursor in the
Miles Bader <miles@gnu.org>
parents: 34650
diff changeset
131 ;; Inhibit the cursor when the buffer contains only an image,
a8fd9112792b (insert-image-file): When visiting an image, suppress the cursor in the
Miles Bader <miles@gnu.org>
parents: 34650
diff changeset
132 ;; because cursors look very strange on top of images.
35884
3d9c9fe711c4 (insert-image-file): When visiting an image, set `truncate-lines' to t
Miles Bader <miles@gnu.org>
parents: 35854
diff changeset
133 (setq cursor-type nil)
3d9c9fe711c4 (insert-image-file): When visiting an image, set `truncate-lines' to t
Miles Bader <miles@gnu.org>
parents: 35854
diff changeset
134 ;; This just makes the arrow displayed in the right fringe
3d9c9fe711c4 (insert-image-file): When visiting an image, set `truncate-lines' to t
Miles Bader <miles@gnu.org>
parents: 35854
diff changeset
135 ;; area look correct when the image is wider than the window.
3d9c9fe711c4 (insert-image-file): When visiting an image, set `truncate-lines' to t
Miles Bader <miles@gnu.org>
parents: 35854
diff changeset
136 (setq truncate-lines t))))
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
137 rval))
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
138
64556
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
139 ;; We use a yank-handler to make yanked images unique, so that
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
140 ;; yanking two copies of the same image next to each other are
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
141 ;; recognized as two different images.
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
142 (defun image-file-yank-handler (string)
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
143 "Yank handler for inserting an image into a buffer."
64594
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
144 (let ((len (length string))
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
145 (image (get-text-property 0 'display string)))
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
146 (remove-text-properties 0 len yank-excluded-properties string)
64556
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
147 (if (consp image)
64594
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
148 (add-text-properties 0
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
149 (or (next-single-property-change 0 'image-counter string)
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
150 (length string))
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
151 `(display
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
152 ,(cons (car image) (cdr image))
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
153 yank-handler
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
154 ,(cons 'image-file-yank-handler '(nil t)))
7a0be66e1adb (insert-image-file, image-file-yank-handler): Fix
Kim F. Storm <storm@cua.dk>
parents: 64556
diff changeset
155 string))
64556
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
156 (insert string)))
a0c4a6096f55 (insert-image-file): Add yank-handler.
Kim F. Storm <storm@cua.dk>
parents: 64091
diff changeset
157
60523
2fa021a3a2fb (image-file-handler): Put `safe-magic' property to
Juri Linkov <juri@jurta.org>
parents: 52401
diff changeset
158 (put 'image-file-handler 'safe-magic t)
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
159 (defun image-file-handler (operation &rest args)
32185
f7460e78c02a Docstring fixes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32003
diff changeset
160 "Filename handler for inserting image files.
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
161 OPERATION is the operation to perform, on ARGS.
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
162 See `file-name-handler-alist' for details."
32003
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
163 (if (and (eq operation 'insert-file-contents)
ff2dfe1f1df9 (image-file-name-extensions): New variable.
Miles Bader <miles@gnu.org>
parents: 31934
diff changeset
164 auto-image-file-mode)
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
165 (apply #'insert-image-file args)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
166 ;; We don't handle OPERATION, use another handler or the default
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
167 (apply #'image-file-call-underlying operation operation args)))
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
168
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
169 (defun image-file-call-underlying (function operation &rest args)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
170 "Call FUNCTION with `image-file-handler' and OPERATION inhibited.
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
171 Optional argument ARGS are the arguments to call FUNCTION with."
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
172 (let ((inhibit-file-name-handlers
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
173 (cons 'image-file-handler
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
174 (and (eq inhibit-file-name-operation operation)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
175 inhibit-file-name-handlers)))
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
176 (inhibit-file-name-operation operation))
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
177 (apply function args)))
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
178
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
179
32316
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
180 ;;;###autoload
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
181 (define-minor-mode auto-image-file-mode
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
182 "Toggle visiting of image files as images.
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
183 With prefix argument ARG, turn on if positive, otherwise off.
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
184 Returns non-nil if the new state is enabled.
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
185
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
186 Image files are those whose name has an extension in
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
187 `image-file-name-extensions', or matches a regexp in
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
188 `image-file-name-regexps'."
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
189 :global t
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
190 :group 'image
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
191 ;; Remove existing handler
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
192 (let ((existing-entry
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
193 (rassq 'image-file-handler file-name-handler-alist)))
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
194 (when existing-entry
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
195 (setq file-name-handler-alist
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
196 (delq existing-entry file-name-handler-alist))))
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
197 ;; Add new handler, if enabled
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
198 (when auto-image-file-mode
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
199 (push (cons (image-file-name-regexp) 'image-file-handler)
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
200 file-name-handler-alist)))
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
201
b930d561cd53 (auto-image-file-mode): Move to the end of the file, because
Miles Bader <miles@gnu.org>
parents: 32220
diff changeset
202
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
203 (provide 'image-file)
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
204
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
205 ;; arch-tag: 04cafe36-f7ba-4c80-9f47-4cb656520ce1
31934
27f239b438d2 Initial checkin.
Miles Bader <miles@gnu.org>
parents:
diff changeset
206 ;;; image-file.el ends here