1;;; iimage.el --- Inline image minor mode. 2 3;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 4 5;; Author: KOSEKI Yoshinori <kose@meadowy.org> 6;; Maintainer: KOSEKI Yoshinori <kose@meadowy.org> 7;; Keywords: multimedia 8 9;; This file is part of GNU Emacs. 10 11;; GNU Emacs is free software; you can redistribute it and/or modify 12;; it under the terms of the GNU General Public License as published by 13;; the Free Software Foundation; either version 2, or (at your option) 14;; any later version. 15 16;; GNU Emacs is distributed in the hope that it will be useful, 17;; but WITHOUT ANY WARRANTY; without even the implied warranty of 18;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19;; GNU General Public License for more details. 20 21;; You should have received a copy of the GNU General Public License 22;; along with GNU Emacs; see the file COPYING. If not, write to the 23;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 24;; Boston, MA 02110-1301, USA. 25 26;;; Commentary: 27 28;; Iimage is a minor mode that displays images, when image-filename 29;; exists in the buffer. 30;; http://www.netlaputa.ne.jp/~kose/Emacs/iimage.html 31;; 32;; Add to your `~/.emacs': 33;; (autoload 'iimage-mode "iimage" "Support Inline image minor mode." t) 34;; (autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t) 35;; 36;; ** Display images in *Info* buffer. 37;; 38;; (add-hook 'info-mode-hook 'turn-on-iimage-mode) 39;; 40;; .texinfo: @file{file://foo.png} 41;; .info: `file://foo.png' 42;; 43;; ** Display images in Wiki buffer. 44;; 45;; (add-hook 'wiki-mode-hook 'turn-on-iimage-mode) 46;; 47;; wiki-file: [[foo.png]] 48 49;;; Code: 50 51(eval-when-compile 52 (require 'image-file)) 53 54(defgroup iimage nil 55 "Support for inline images." 56 :version "22.1" 57 :group 'image) 58 59(defconst iimage-version "1.1") 60(defvar iimage-mode nil) 61(defvar iimage-mode-map nil) 62 63;; Set up key map. 64(unless iimage-mode-map 65 (setq iimage-mode-map (make-sparse-keymap)) 66 (define-key iimage-mode-map "\C-l" 'iimage-recenter)) 67 68(defun iimage-recenter (&optional arg) 69"Re-draw images and recenter." 70 (interactive "P") 71 (iimage-mode-buffer 0) 72 (iimage-mode-buffer 1) 73 (recenter arg)) 74 75(defvar iimage-mode-image-filename-regex 76 (concat "[-+./_0-9a-zA-Z]+\\." 77 (regexp-opt (nconc (mapcar #'upcase 78 image-file-name-extensions) 79 image-file-name-extensions) 80 t))) 81 82(defvar iimage-mode-image-regex-alist 83 `((,(concat "\\(`?file://\\|\\[\\[\\|<\\|`\\)?" 84 "\\(" iimage-mode-image-filename-regex "\\)" 85 "\\(\\]\\]\\|>\\|'\\)?") . 2)) 86"*Alist of filename REGEXP vs NUM. 87Each element looks like (REGEXP . NUM). 88NUM specifies which parenthesized expression in the regexp. 89 90Examples of image filename regexps: 91 file://foo.png 92 `file://foo.png' 93 \\[\\[foo.gif]] 94 <foo.png> 95 foo.JPG 96") 97 98(defvar iimage-mode-image-search-path nil 99"*List of directories to search for image files for iimage-mode.") 100 101;;;###autoload 102(defun turn-on-iimage-mode () 103"Unconditionally turn on iimage mode." 104 (interactive) 105 (iimage-mode 1)) 106 107(defun turn-off-iimage-mode () 108"Unconditionally turn off iimage mode." 109 (interactive) 110 (iimage-mode 0)) 111 112;; Emacs21.3 or earlier does not heve locate-file. 113(if (fboundp 'locate-file) 114 (defalias 'iimage-locate-file 'locate-file) 115 (defun iimage-locate-file (filename path) 116 (locate-library filename t path))) 117 118(defun iimage-mode-buffer (arg) 119"Display/undisplay images. 120With numeric ARG, display the images if and only if ARG is positive." 121 (interactive) 122 (let ((ing (if (numberp arg) 123 (> arg 0) 124 iimage-mode)) 125 (modp (buffer-modified-p (current-buffer))) 126 file buffer-read-only) 127 (save-excursion 128 (goto-char (point-min)) 129 (dolist (pair iimage-mode-image-regex-alist) 130 (while (re-search-forward (car pair) nil t) 131 (if (and (setq file (match-string (cdr pair))) 132 (setq file (iimage-locate-file file 133 (cons default-directory 134 iimage-mode-image-search-path)))) 135 (if ing 136 (add-text-properties (match-beginning 0) (match-end 0) 137 (list 'display (create-image file))) 138 (remove-text-properties (match-beginning 0) (match-end 0) 139 '(display))))))) 140 (set-buffer-modified-p modp))) 141 142;;;###autoload 143(define-minor-mode iimage-mode 144 "Toggle inline image minor mode." 145 :group 'iimage :lighter " iImg" :keymap iimage-mode-map 146 (run-hooks 'iimage-mode-hook) 147 (iimage-mode-buffer iimage-mode)) 148 149(provide 'iimage) 150 151;;; arch-tag: f6f8e29a-08f6-4a12-9496-51e67441ce65 152;;; iimage.el ends here 153