Mercurial > emacs
changeset 108903:bbdc76e1b06c
* lisp/iimage.el: Remove images as soon as the underlying text is modified.
(iimage-modification-hook): New function.
(iimage-mode-buffer): Use it.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 07 Jun 2010 17:01:23 -0400 |
parents | 68586a267c40 |
children | 2bc8bdaafa9a 387729300909 |
files | lisp/ChangeLog lisp/ChangeLog.13 lisp/iimage.el |
diffstat | 3 files changed, 34 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Jun 07 15:37:50 2010 -0400 +++ b/lisp/ChangeLog Mon Jun 07 17:01:23 2010 -0400 @@ -1,3 +1,9 @@ +2010-06-07 Martin Pohlack <mp26@os.inf.tu-dresden.de> + + * iimage.el: Remove images as soon as the underlying text is modified. + (iimage-modification-hook): New function. + (iimage-mode-buffer): Use it. + 2010-06-07 Stefan Monnier <monnier@iro.umontreal.ca> * emacs-lisp/smie.el (smie-indent-offset-rule): Rename from @@ -4691,8 +4697,8 @@ 2009-12-10 Vinicius Jose Latorre <viniciusjl@ig.com.br> - * whitespace.el (whitespace-display-char-on): Ensure - `buffer-display-table' is unique when two or more windows are + * whitespace.el (whitespace-display-char-on): + Ensure `buffer-display-table' is unique when two or more windows are visible. Reported by Martin Pohlack <mp26@os.inf.tu-dresden.de>. New version 12.1.
--- a/lisp/ChangeLog.13 Mon Jun 07 15:37:50 2010 -0400 +++ b/lisp/ChangeLog.13 Mon Jun 07 17:01:23 2010 -0400 @@ -7161,7 +7161,7 @@ * doc-view.el (doc-view-search-backward, doc-view-search): Fix assignment to free variable bug. -2007-11-16 Martin Pohlack <mp26@os.inf.tu-dresden.de> (tiny change) +2007-11-16 Martin Pohlack <mp26@os.inf.tu-dresden.de> * emulation/pc-select.el (pc-select-shifted-mark): New var. (ensure-mark): Set it.
--- a/lisp/iimage.el Mon Jun 07 15:37:50 2010 -0400 +++ b/lisp/iimage.el Mon Jun 07 17:01:23 2010 -0400 @@ -101,6 +101,19 @@ (interactive) (iimage-mode 0)) +(defun iimage-modification-hook (beg end) + "Remove display property if a display region is modified." + ;;(debug-print "ii1 begin %d, end %d\n" beg end) + (let ((inhibit-modification-hooks t) + (beg (previous-single-property-change end 'display + nil (line-beginning-position))) + (end (next-single-property-change beg 'display + nil (line-end-position)))) + (when (and beg end (plist-get (text-properties-at beg) 'display)) + ;;(debug-print "ii2 begin %d, end %d\n" beg end) + (remove-text-properties beg end + '(display nil modification-hooks nil))))) + (defun iimage-mode-buffer (arg) "Display images if ARG is non-nil, undisplay them otherwise." (let ((image-path (cons default-directory iimage-mode-image-search-path)) @@ -110,16 +123,18 @@ (goto-char (point-min)) (dolist (pair iimage-mode-image-regex-alist) (while (re-search-forward (car pair) nil t) - (if (and (setq file (match-string (cdr pair))) - (setq file (locate-file file image-path))) - ;; FIXME: we don't mark our images, so we can't reliably - ;; remove them either (we may leave some of ours, and we - ;; may remove other packages's display properties). - (if arg - (add-text-properties (match-beginning 0) (match-end 0) - (list 'display (create-image file))) - (remove-text-properties (match-beginning 0) (match-end 0) - '(display)))))))))) + (when (and (setq file (match-string (cdr pair))) + (setq file (locate-file file image-path))) + ;; FIXME: we don't mark our images, so we can't reliably + ;; remove them either (we may leave some of ours, and we + ;; may remove other packages's display properties). + (if arg + (add-text-properties (match-beginning 0) (match-end 0) + `(display ,(create-image file) + modification-hooks + (iimage-modification-hook))) + (remove-text-properties (match-beginning 0) (match-end 0) + '(display modification-hooks)))))))))) ;;;###autoload (define-minor-mode iimage-mode