From: Chong Yidong <cyd@stupidchicken.com>
To: emacs-devel@gnu.org
Subject: Re: Image mode
Date: Wed, 07 Feb 2007 14:21:16 -0500 [thread overview]
Message-ID: <873b5h4vv7.fsf@stupidchicken.com> (raw)
In-Reply-To: <f7ccd24b0702041540h196c7e60l126260ecd527a9b8@mail.gmail.com> (Juanma Barranquero's message of "Mon\, 5 Feb 2007 00\:40\:46 +0100")
I would like to present a concrete proposal based on the discussion
over the last couple of days.
Firstly, turn image autodetection off for xpm and xbm. The reason for
this is that these are text-based image formats that will be handled
differently from binary images (see below). An additional reason is
that C header files easily match the header-regexp for xbm, so the
main distinguishing feature of an xbm image is its filename, which
makes autodetection pointless.
Secondly, make autodetected images call image-mode instead of
image-mode-maybe, since only binary image formats are autodetected.
Thirdly, make the function image-type-auto-detected-p scan
auto-mode-alist for a non-image-mode match, and returns nil if one is
found.
Forthly, associate xpm and xbm files with image-mode-maybe in
auto-mode-alist; this will be the only use of image-mode-maybe.
image-mode-maybe scans auto-mode-alist for a non-image major mode,
turns on that mode, and turns on image-minor-mode.
The result is that binary image files are displayed in image-mode iff
their file contents are autodetected and their filenames do not
indicate a non-image mode. This addresses the issue raised by several
people that a file named foo.c should never be opened as an image.
Binary image files are never displayed in image-minor-mode.
Text-based image files (xpm and xbm) are only detected by their
filename, and are opened in (in this case) C mode plus
image-minor-mode.
Finally, the `disabled' tag for image-toggle-display is removed, and
image-mode goes back to showing the image by default.
Any comments?
*** emacs/lisp/files.el.~1.882.~ 2007-02-05 12:05:37.000000000 -0500
--- emacs/lisp/files.el 2007-02-06 20:27:53.000000000 -0500
***************
*** 2127,2133 ****
associated with that interpreter in `interpreter-mode-alist'.")
(defvar magic-mode-alist
! `((image-type-auto-detected-p . image-mode-maybe)
;; The < comes before the groups (but the first) to reduce backtracking.
;; TODO: UTF-16 <?xml may be preceded by a BOM 0xff 0xfe or 0xfe 0xff.
;; We use [ \t\n] instead of `\\s ' to make regex overflow less likely.
--- 2127,2133 ----
associated with that interpreter in `interpreter-mode-alist'.")
(defvar magic-mode-alist
! `((image-type-auto-detected-p . image-mode)
;; The < comes before the groups (but the first) to reduce backtracking.
;; TODO: UTF-16 <?xml may be preceded by a BOM 0xff 0xfe or 0xfe 0xff.
;; We use [ \t\n] instead of `\\s ' to make regex overflow less likely.
*** emacs/lisp/image.el.~1.69.~ 2007-01-28 10:49:26.000000000 -0500
--- emacs/lisp/image.el 2007-02-07 14:05:28.000000000 -0500
***************
*** 67,77 ****
(defvar image-type-auto-detectable
'((pbm . t)
! (xbm . t)
(bmp . maybe)
(gif . maybe)
(png . maybe)
! (xpm . maybe)
(jpeg . maybe)
(tiff . maybe)
(postscript . nil))
--- 67,77 ----
(defvar image-type-auto-detectable
'((pbm . t)
! (xbm . nil)
(bmp . maybe)
(gif . maybe)
(png . maybe)
! (xpm . nil)
(jpeg . maybe)
(tiff . maybe)
(postscript . nil))
***************
*** 340,354 ****
;;;###autoload
(defun image-type-auto-detected-p ()
"Return t iff the current buffer contains an auto-detectable image.
! Whether image types are auto-detectable or not depends on the setting
! of the variable `image-type-auto-detectable'.
! This function is intended to be used from `magic-mode-alist' (which see)."
(let* ((type (image-type-from-buffer))
(auto (and type (cdr (assq type image-type-auto-detectable)))))
(and auto
! (or (eq auto t)
! (image-type-available-p type)))))
;;;###autoload
--- 340,370 ----
;;;###autoload
(defun image-type-auto-detected-p ()
"Return t iff the current buffer contains an auto-detectable image.
! This function is intended to be used from `magic-mode-alist' (which see).
! First, compare the first few bytes of the buffer with
! `image-type-header-regexps'. If an appropriate image type is
! found, consult the variable `image-type-auto-detectable' to see
! if it can be autodetected. Finally, if `buffer-file-name' is
! non-nil, check if it matches another major mode in
! `auto-mode-alist' apart from `image-mode'; if there is another
! match, the autodetection is considered to have failed. If all
! the preceding steps succeeded, return t."
(let* ((type (image-type-from-buffer))
(auto (and type (cdr (assq type image-type-auto-detectable)))))
(and auto
! (or (eq auto t) (image-type-available-p type))
! (or (null buffer-file-name)
! (not (assoc-default
! buffer-file-name
! (delq nil (mapcar
! (lambda (elt)
! (unless (memq (or (car-safe (cdr elt))
! (cdr elt))
! '(image-mode image-mode-maybe))
! elt))
! auto-mode-alist))
! 'string-match))))))
;;;###autoload
*** emacs/lisp/image-mode.el.~1.20.~ 2007-02-02 20:00:19.000000000 -0500
--- emacs/lisp/image-mode.el 2007-02-07 13:53:58.000000000 -0500
***************
*** 60,65 ****
--- 60,71 ----
(setq major-mode 'image-mode)
(use-local-map image-mode-map)
(add-hook 'change-major-mode-hook 'image-toggle-display-text nil t)
+ (if (and (display-images-p)
+ (not (get-text-property (point-min) 'display)))
+ (image-toggle-display)
+ ;; Set next vars when image is already displayed but local
+ ;; variables were cleared by kill-all-local-variables
+ (setq cursor-type nil truncate-lines t))
(run-mode-hooks 'image-mode-hook)
(if (display-images-p)
(message "%s" (concat
***************
*** 174,189 ****
(if (called-interactively-p)
(message "Repeat this command to go back to displaying the file as text")))))
- ;; Don't override the setting from .emacs.
- ;;;###autoload (put 'image-toggle-display 'disabled t)
-
- (if (get 'image-toggle-display 'disabled)
- (put 'image-toggle-display 'disabled "\
-
- Warning: Displaying images in Emacs could be a security risk.
- Please ensure that you are using up-to-date image libraries
- and that the images being displayed come from a trusted source."))
-
(provide 'image-mode)
;; arch-tag: b5b2b7e6-26a7-4b79-96e3-1546b5c4c6cb
--- 180,185 ----
next prev parent reply other threads:[~2007-02-07 19:21 UTC|newest]
Thread overview: 164+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-04 22:52 Image mode Juri Linkov
2007-02-04 23:40 ` Juanma Barranquero
2007-02-05 1:25 ` Chong Yidong
2007-02-05 9:03 ` Juanma Barranquero
2007-02-05 9:16 ` Juanma Barranquero
2007-02-05 9:28 ` David Kastrup
2007-02-05 9:37 ` David Kastrup
2007-02-05 11:12 ` Juanma Barranquero
2007-02-06 0:16 ` Richard Stallman
2007-02-06 0:25 ` Juanma Barranquero
2007-02-06 1:37 ` Drew Adams
2007-02-06 7:18 ` David Kastrup
2007-02-06 11:09 ` Slawomir Nowaczyk
2007-02-06 0:15 ` Richard Stallman
2007-02-06 0:29 ` Lennart Borgman (gmail)
2007-02-06 4:56 ` Chong Yidong
2007-02-06 23:15 ` Richard Stallman
2007-02-06 23:41 ` Chong Yidong
2007-02-06 23:55 ` Slawomir Nowaczyk
2007-02-05 7:13 ` David Kastrup
2007-02-05 9:06 ` Juanma Barranquero
2007-02-07 19:21 ` Chong Yidong [this message]
2007-02-07 19:43 ` Stuart D. Herring
2007-02-07 21:08 ` Chong Yidong
2007-02-07 21:21 ` Stefan Monnier
2007-02-07 21:35 ` Stuart D. Herring
2007-02-07 23:07 ` Stefan Monnier
2007-02-08 9:33 ` Jason Rumney
2007-02-08 16:38 ` Stefan Monnier
2007-02-08 16:55 ` Stuart D. Herring
2007-02-08 18:36 ` Chong Yidong
2007-02-07 22:55 ` Kim F. Storm
2007-02-07 23:27 ` Juri Linkov
2007-02-08 9:30 ` Jason Rumney
2007-02-08 15:23 ` Chong Yidong
2007-02-05 1:40 ` Chong Yidong
2007-02-05 4:21 ` Miles Bader
2007-02-05 10:58 ` Kim F. Storm
2007-02-05 11:02 ` Lennart Borgman (gmail)
2007-02-05 11:16 ` Juanma Barranquero
2007-02-05 11:26 ` David Kastrup
2007-02-05 11:39 ` Juanma Barranquero
2007-02-05 11:48 ` David Kastrup
2007-02-05 12:00 ` Juanma Barranquero
2007-02-05 12:08 ` David Kastrup
2007-02-05 12:16 ` Juanma Barranquero
2007-02-05 19:00 ` Stefan Monnier
2007-02-06 0:16 ` Richard Stallman
2007-02-06 0:32 ` Lennart Borgman (gmail)
2007-02-06 23:14 ` Richard Stallman
2007-02-06 7:16 ` David Kastrup
2007-02-05 12:46 ` Lennart Borgman (gmail)
2007-02-05 12:57 ` Juanma Barranquero
2007-02-05 12:58 ` David Kastrup
2007-02-05 14:47 ` Mathias Dahl
2007-02-05 14:54 ` Juanma Barranquero
2007-02-05 17:08 ` Chong Yidong
2007-02-05 18:35 ` Mathias Dahl
2007-02-05 18:35 ` Jason Rumney
2007-02-05 19:06 ` Chong Yidong
2007-02-05 19:14 ` Juanma Barranquero
2007-02-05 19:26 ` Juanma Barranquero
2007-02-05 19:28 ` Chong Yidong
2007-02-05 19:51 ` Juanma Barranquero
2007-02-05 20:12 ` Stefan Monnier
2007-02-05 20:14 ` Juanma Barranquero
2007-02-05 20:13 ` Chong Yidong
2007-02-05 20:21 ` Juanma Barranquero
2007-02-05 20:33 ` Chong Yidong
2007-02-05 21:25 ` Juanma Barranquero
2007-02-05 21:30 ` Chong Yidong
2007-02-05 22:25 ` Juanma Barranquero
2007-02-05 23:50 ` Chong Yidong
2007-02-06 0:17 ` Juanma Barranquero
2007-02-06 7:06 ` David Kastrup
2007-02-06 8:30 ` Juanma Barranquero
2007-02-06 8:42 ` David Kastrup
2007-02-06 9:06 ` Juanma Barranquero
2007-02-06 9:27 ` David Kastrup
2007-02-06 9:43 ` Juanma Barranquero
2007-02-06 10:29 ` David Kastrup
2007-02-06 10:57 ` Juanma Barranquero
2007-02-06 11:10 ` David Kastrup
2007-02-06 11:42 ` Juanma Barranquero
2007-02-06 11:48 ` David Kastrup
2007-02-06 12:02 ` Juanma Barranquero
2007-02-06 23:16 ` Richard Stallman
2007-02-07 0:06 ` David Kastrup
2007-02-07 19:41 ` Richard Stallman
2007-02-07 19:41 ` Richard Stallman
2007-02-07 16:10 ` Stuart D. Herring
2007-02-09 17:24 ` Chris Moore
2007-02-09 18:14 ` Stuart D. Herring
2007-02-09 18:22 ` Chong Yidong
2007-02-12 4:55 ` Richard Stallman
2007-02-13 6:01 ` Chris Moore
2007-02-13 23:36 ` Richard Stallman
2007-02-06 23:16 ` Richard Stallman
2007-02-06 23:47 ` David Kastrup
2007-02-07 19:41 ` Richard Stallman
2007-02-06 1:46 ` Miles Bader
2007-02-06 11:53 ` Slawomir Nowaczyk
2007-02-06 15:15 ` Stefan Monnier
2007-02-06 15:46 ` Jason Rumney
2007-02-06 16:08 ` Chong Yidong
2007-02-06 16:58 ` Jason Rumney
2007-02-06 17:10 ` Chong Yidong
2007-02-06 23:51 ` Kim F. Storm
2007-02-07 0:03 ` Chong Yidong
2007-02-07 0:41 ` Kim F. Storm
2007-02-05 20:24 ` Juanma Barranquero
2007-02-05 20:36 ` Chong Yidong
2007-02-05 20:20 ` Chong Yidong
2007-02-05 20:33 ` Juanma Barranquero
2007-02-06 17:08 ` Richard Stallman
2007-02-06 17:56 ` Juanma Barranquero
2007-02-07 1:37 ` Richard Stallman
2007-02-07 1:42 ` Juanma Barranquero
2007-02-07 7:15 ` David Kastrup
2007-02-07 8:09 ` Juanma Barranquero
2007-02-07 19:41 ` Richard Stallman
2007-02-06 17:08 ` Richard Stallman
2007-02-06 23:46 ` Chris Moore
2007-02-06 23:58 ` Chong Yidong
2007-02-07 16:59 ` Chris Moore
2007-02-08 0:52 ` Richard Stallman
2007-02-09 17:17 ` Chris Moore
2007-02-10 9:51 ` Eli Zaretskii
2007-02-05 19:06 ` Juanma Barranquero
2007-02-05 21:27 ` Juri Linkov
2007-02-06 11:42 ` Slawomir Nowaczyk
2007-02-05 19:07 ` Lennart Borgman (gmail)
2007-02-06 9:19 ` Jason Rumney
2007-02-06 9:35 ` David Kastrup
2007-02-06 9:46 ` Lennart Borgman (gmail)
2007-02-06 10:21 ` Mathias Dahl
2007-02-06 16:50 ` Stefan Monnier
2007-02-05 21:28 ` Juri Linkov
2007-02-05 21:35 ` Lennart Borgman (gmail)
2007-02-05 21:38 ` Chong Yidong
2007-02-05 22:02 ` Stefan Monnier
2007-02-06 17:09 ` Richard Stallman
2007-02-05 11:15 ` Juanma Barranquero
2007-02-05 21:45 ` Kim F. Storm
2007-02-05 21:53 ` Chris Moore
2007-02-05 12:22 ` Miles Bader
[not found] ` <E1HEE0j-0004T3-Rc@fencepost.gnu.org>
2007-02-06 7:20 ` David Kastrup
2007-02-06 23:15 ` Richard Stallman
2007-02-06 10:53 ` Lars Magne Ingebrigtsen
2007-02-06 23:16 ` Richard Stallman
2007-02-06 12:26 ` Kim F. Storm
2007-02-06 12:46 ` David Kastrup
2007-02-06 16:48 ` Stefan Monnier
2007-02-05 18:56 ` Stefan Monnier
2007-02-05 19:08 ` Chong Yidong
2007-02-05 19:28 ` Stefan Monnier
2007-02-05 21:12 ` Chris Moore
2007-02-05 21:28 ` Juri Linkov
2007-02-06 11:09 ` Slawomir Nowaczyk
2007-02-05 19:10 ` Richard Stallman
2007-02-05 21:25 ` Chris Moore
2007-02-06 17:09 ` Richard Stallman
2007-02-06 22:54 ` David Kastrup
2007-02-07 1:37 ` Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=873b5h4vv7.fsf@stupidchicken.com \
--to=cyd@stupidchicken.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).