Commit 75e5b373 authored by Miles Bader's avatar Miles Bader
Browse files

(image-file-name-extensions): New variable.

(image-file-name-regexps): Renamed from `image-file-regexps'.
  New default value is nil.  Call `auto-image-file-mode'.
(image-file-name-regexp): New function.
(auto-image-file-mode): New minor mode.
(insert-image-file): Don't make conditional on the image-file
  handler being enabled.
(image-file-handler): Make the call here conditional instead.
(set-image-file-handler-enabled, enable-image-file-handler)
(disable-image-file-handler): Functions removed.
parent dc3cd20f
2000-09-29 Miles Bader <miles@gnu.org>
* image-file.el (image-file-name-extensions): New variable.
(image-file-name-regexps): Renamed from `image-file-regexps'.
New default value is nil. Call `auto-image-file-mode'.
(image-file-name-regexp): New function.
(auto-image-file-mode): New minor mode.
(insert-image-file): Don't make conditional on the image-file
handler being enabled.
(image-file-handler): Make the call here conditional instead.
(set-image-file-handler-enabled, enable-image-file-handler)
(disable-image-file-handler): Functions removed.
* emacs-lisp/authors.el (authors-print): Rephrase many-files
string.
2000-09-29 Gerd Moellmann <gerd@gnu.org> 2000-09-29 Gerd Moellmann <gerd@gnu.org>
* textmodes/tex-mode.el (latex-outline-regexp): Don't use `list*'; * textmodes/tex-mode.el (latex-outline-regexp): Don't use `list*';
......
...@@ -35,36 +35,88 @@ ...@@ -35,36 +35,88 @@
(require 'image) (require 'image)
;;;###autoload
(defcustom image-file-handler-enabled nil (defcustom image-file-name-extensions
"True if visiting an image file will actually display the image. '("png" "jpeg" "jpg" "gif" "tiff" "xbm" "xpm")
A file is considered an image file if its filename matches one of the "*A list of image-file filename extensions.
regexps in `image-file-regexps'. Filenames having one of these extensions are considered image files,
in addition to those matching `image-file-name-regexps'.
Setting this variable directly does not take effect;
use either \\[customize] or the function `set-image-file-handler-enabled'." See `auto-image-file-mode'; if `auto-image-file-mode' is enabled,
:type 'boolean setting this variable directly does not take effect unless
:set (lambda (sym val) (set-image-file-handler-enabled val)) `auto-image-file-mode' is re-enabled; this happens automatically the
variable is set using \\[customize]."
:type '(repeat string)
:set (lambda (sym val)
(set-default sym val)
(when auto-image-file-mode
;; Re-initialize the image-file handler
(auto-image-file-mode t)))
:initialize 'custom-initialize-default :initialize 'custom-initialize-default
:require 'image-file
:group 'image) :group 'image)
(defcustom image-file-regexps (defcustom image-file-name-regexps nil
'("\\.png$" "\\.jpeg$" "\\.jpg$" "\\.gif$" "\\.tiff$" "\\.x[bp]m$") "*A list of regexps matching image-file filenames.
"*A list of regexps matching files that should be displayed as images. Filenames matching one of these regexps are considered image files,
in addition to those with an extension in `image-file-name-extensions'.
Setting this variable directly does not take effect until the next time See `auto-image-file-mode'; if `auto-image-file-mode' is enabled,
`set-image-file-handler-enabled' is called (which happens automatically setting this variable directly does not take effect unless
when using \\[customize]." `auto-image-file-mode' is re-enabled; this happens automatically the
variable is set using \\[customize]."
:type '(repeat regexp) :type '(repeat regexp)
:set (lambda (sym val) :set (lambda (sym val)
(set-default sym val) (set-default sym val)
(when image-file-handler-enabled (when auto-image-file-mode
;; Re-initialize the image-file handler ;; Re-initialize the image-file handler
(set-image-file-handler-enabled t))) (auto-image-file-mode t)))
:initialize 'custom-initialize-default :initialize 'custom-initialize-default
:group 'image) :group 'image)
;;;###autoload
(defun image-file-name-regexp ()
"Return a regular expression that matches image-file filenames."
(let ((exts-regexp
(and image-file-name-extensions
(concat "\\."
(regexp-opt image-file-name-extensions t)
"\\'"))))
(if image-file-name-regexps
(mapconcat 'identity
(if exts-regexp
(cons exts-regexp image-file-regexps)
image-file-regexps)
"\\|")
exts-regexp)))
;;;###autoload
(define-minor-mode auto-image-file-mode
"Toggle visiting of image files as images.
With prefix argument ARG, turn on if positive, otherwise off.
Returns non-nil if the new state is enabled.
Image files are those whose name has an extension in
`image-file-name-extensions', or matches a regexp in
`image-file-name-regexps'."
nil
nil
nil
:global t
:group 'image
;; Remove existing handler
(let ((existing-entry
(rassq 'image-file-handler file-name-handler-alist)))
(when existing-entry
(setq file-name-handler-alist
(delq existing-entry file-name-handler-alist))))
;; Add new handler, if enabled
(when auto-image-file-mode
(push (cons (image-file-name-regexp) 'image-file-handler)
file-name-handler-alist)))
;;;###autoload ;;;###autoload
(defun insert-image-file (file &optional visit beg end replace) (defun insert-image-file (file &optional visit beg end replace)
"Insert the image file FILE into the current buffer. "Insert the image file FILE into the current buffer.
...@@ -74,12 +126,14 @@ the command `insert-file-contents'." ...@@ -74,12 +126,14 @@ the command `insert-file-contents'."
(image-file-call-underlying #'insert-file-contents-literally (image-file-call-underlying #'insert-file-contents-literally
'insert-file-contents 'insert-file-contents
file visit beg end replace))) file visit beg end replace)))
(when (and image-file-handler-enabled (or (null beg) (zerop beg)) (null end)) ;; Turn the image data into a real image, but only if the whole file
;; Make image into a picture, but only if the whole file was inserted ;; was inserted
(when (and (or (null beg) (zerop beg)) (null end))
(let* ((ibeg (point)) (let* ((ibeg (point))
(iend (+ (point) (cadr rval))) (iend (+ (point) (cadr rval)))
(data (data
(string-make-unibyte (buffer-substring-no-properties ibeg iend))) (string-make-unibyte
(buffer-substring-no-properties ibeg iend)))
(image (image
(create-image data nil t)) (create-image data nil t))
(props (props
...@@ -99,7 +153,8 @@ the command `insert-file-contents'." ...@@ -99,7 +153,8 @@ the command `insert-file-contents'."
"File name handler for inserting image files. "File name handler for inserting image files.
OPERATION is the operation to perform, on ARGS. OPERATION is the operation to perform, on ARGS.
See `file-name-handler-alist' for details." See `file-name-handler-alist' for details."
(if (eq operation 'insert-file-contents) (if (and (eq operation 'insert-file-contents)
auto-image-file-mode)
(apply #'insert-image-file args) (apply #'insert-image-file args)
;; We don't handle OPERATION, use another handler or the default ;; We don't handle OPERATION, use another handler or the default
(apply #'image-file-call-underlying operation operation args))) (apply #'image-file-call-underlying operation operation args)))
...@@ -114,38 +169,6 @@ Optional argument ARGS are the arguments to call FUNCTION with." ...@@ -114,38 +169,6 @@ Optional argument ARGS are the arguments to call FUNCTION with."
(inhibit-file-name-operation operation)) (inhibit-file-name-operation operation))
(apply function args))) (apply function args)))
;;;###autoload
(defun set-image-file-handler-enabled (enabled)
"Enable or disable visiting image files as real images, as per ENABLED.
The regexp in `image-file-regexp' is used to determine which filenames are
considered image files."
;; Remove existing handler
(let ((existing-entry (rassq 'image-file-handler file-name-handler-alist)))
(when existing-entry
(setq file-name-handler-alist
(delq existing-entry file-name-handler-alist))))
;; Add new handler
(when enabled
(let ((regexp
(concat "\\("
(mapconcat 'identity image-file-regexps "\\|")
"\\)")))
(setq file-name-handler-alist
(cons (cons regexp 'image-file-handler) file-name-handler-alist))))
(setq-default image-file-handler-enabled enabled))
;;;###autoload
(defun enable-image-file-handler ()
"Enable visiting image files as real images.
The regexp in `image-file-regexp' is used to determine which filenames are
considered image files."
(interactive)
(set-image-file-handler-enabled t))
(defun disable-image-file-handler ()
"Disable visiting image files as real images."
(interactive)
(set-image-file-handler-enabled nil))
(provide 'image-file) (provide 'image-file)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment