Mercurial > emacs
changeset 75744:53fa6ea37e3a
(image-type-auto-detectable): Don't autodetect x[pb]m.
(image-type-auto-detected-p): Fail if another match is found in
auto-mode-alist.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Fri, 09 Feb 2007 16:50:16 +0000 |
parents | 83d10550e0c7 |
children | 19d4ee6e5621 |
files | lisp/image.el |
diffstat | 1 files changed, 25 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/image.el Fri Feb 09 16:50:00 2007 +0000 +++ b/lisp/image.el Fri Feb 09 16:50:16 2007 +0000 @@ -65,13 +65,16 @@ When the name of an image file match REGEXP, it is assumed to be of image type IMAGE-TYPE.") +;; We rely on `auto-mode-alist' to detect xbm and xpm files, instead +;; of content autodetection. Their contents are just C code, so it is +;; easy to generate false matches. (defvar image-type-auto-detectable '((pbm . t) - (xbm . t) + (xbm . nil) (bmp . maybe) (gif . maybe) (png . maybe) - (xpm . maybe) + (xpm . nil) (jpeg . maybe) (tiff . maybe) (postscript . nil)) @@ -340,15 +343,30 @@ ;;;###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). -This function is intended to be used from `magic-mode-alist' (which see)." +First, compare the beginning of the buffer with `image-type-header-regexps'. +If an appropriate image type is found, check if that image type can be +autodetected using the variable `image-type-auto-detectable'. 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. Return t if all the above +steps succeed." (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 (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