X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/33155ffbf64fea0a2e1d32e6d820b1cbc69a647e..8a76ffd1435bc0fc42983f5c1bf9b4ce59c1d679:/lisp/image-file.el diff --git a/lisp/image-file.el b/lisp/image-file.el index afee88d134..d90f5efc8c 100644 --- a/lisp/image-file.el +++ b/lisp/image-file.el @@ -1,6 +1,7 @@ -;;; image-file.el --- Support for visiting image files +;;; image-file.el --- support for visiting image files ;; -;; Copyright (C) 2000 Free Software Foundation, Inc. +;; Copyright (C) 2000, 2001, 2002, 2003, 2004, +;; 2005, 2006 Free Software Foundation, Inc. ;; ;; Author: Miles Bader ;; Keywords: multimedia @@ -19,13 +20,13 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; Defines a file-name-handler hook that transforms visited (or -;; inserted) image files so that they are displayed by emacs as +;; inserted) image files so that they are displayed by Emacs as ;; images. This is done by putting a `display' text-property on the ;; image data, with the image-data still present underneath; if the ;; resulting buffer file is saved to another name it will correctly save @@ -38,15 +39,15 @@ ;;;###autoload (defcustom image-file-name-extensions - '("png" "jpeg" "jpg" "gif" "tiff" "xbm" "xpm" "pbm" "pgm" "ppm") + '("png" "jpeg" "jpg" "gif" "tiff" "tif" "xbm" "xpm" "pbm" "pgm" "ppm" "pnm") "*A list of image-file filename extensions. Filenames having one of these extensions are considered image files, in addition to those matching `image-file-name-regexps'. See `auto-image-file-mode'; if `auto-image-file-mode' is enabled, setting this variable directly does not take effect unless -`auto-image-file-mode' is re-enabled; this happens automatically the -variable is set using \\[customize]." +`auto-image-file-mode' is re-enabled; this happens automatically when +the variable is set using \\[customize]." :type '(repeat string) :set (lambda (sym val) (set-default sym val) @@ -64,8 +65,8 @@ in addition to those with an extension in `image-file-name-extensions'. See function `auto-image-file-mode'; if `auto-image-file-mode' is enabled, setting this variable directly does not take effect unless -`auto-image-file-mode' is re-enabled; this happens automatically the -variable is set using \\[customize]." +`auto-image-file-mode' is re-enabled; this happens automatically when +the variable is set using \\[customize]." :type '(repeat regexp) :set (lambda (sym val) (set-default sym val) @@ -118,6 +119,8 @@ the command `insert-file-contents'." (create-image data nil t)) (props `(display ,image + yank-handler + (image-file-yank-handler nil t) intangible ,image rear-nonsticky (display intangible) ;; This a cheap attempt to make the whole buffer @@ -129,9 +132,32 @@ the command `insert-file-contents'." (when visitingp ;; Inhibit the cursor when the buffer contains only an image, ;; because cursors look very strange on top of images. - (setq cursor-type nil)))) + (setq cursor-type nil) + ;; This just makes the arrow displayed in the right fringe + ;; area look correct when the image is wider than the window. + (setq truncate-lines t)))) rval)) +;; We use a yank-handler to make yanked images unique, so that +;; yanking two copies of the same image next to each other are +;; recognized as two different images. +(defun image-file-yank-handler (string) + "Yank handler for inserting an image into a buffer." + (let ((len (length string)) + (image (get-text-property 0 'display string))) + (remove-text-properties 0 len yank-excluded-properties string) + (if (consp image) + (add-text-properties 0 + (or (next-single-property-change 0 'image-counter string) + (length string)) + `(display + ,(cons (car image) (cdr image)) + yank-handler + ,(cons 'image-file-yank-handler '(nil t))) + string)) + (insert string))) + +(put 'image-file-handler 'safe-magic t) (defun image-file-handler (operation &rest args) "Filename handler for inserting image files. OPERATION is the operation to perform, on ARGS. @@ -153,10 +179,6 @@ Optional argument ARGS are the arguments to call FUNCTION with." (apply function args))) -;;; Note this definition must be at the end of the file, because -;;; `define-minor-mode' actually calls the mode-function if the -;;; associated variable is non-nil, which requires that all needed -;;; functions be already defined. [This is arguably a bug in d-m-m] ;;;###autoload (define-minor-mode auto-image-file-mode "Toggle visiting of image files as images. @@ -182,4 +204,5 @@ Image files are those whose name has an extension in (provide 'image-file) +;;; arch-tag: 04cafe36-f7ba-4c80-9f47-4cb656520ce1 ;;; image-file.el ends here