unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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 ----

  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).