# HG changeset patch # User Stefan Monnier # Date 1275944483 14400 # Node ID bbdc76e1b06c98825a3f1556692cef7e516becd2 # Parent 68586a267c4020d858c7abb882c2593529109939 * lisp/iimage.el: Remove images as soon as the underlying text is modified. (iimage-modification-hook): New function. (iimage-mode-buffer): Use it. diff -r 68586a267c40 -r bbdc76e1b06c lisp/ChangeLog --- 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 + + * 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 * emacs-lisp/smie.el (smie-indent-offset-rule): Rename from @@ -4691,8 +4697,8 @@ 2009-12-10 Vinicius Jose Latorre - * 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 . New version 12.1. diff -r 68586a267c40 -r bbdc76e1b06c lisp/ChangeLog.13 --- 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 (tiny change) +2007-11-16 Martin Pohlack * emulation/pc-select.el (pc-select-shifted-mark): New var. (ensure-mark): Set it. diff -r 68586a267c40 -r bbdc76e1b06c lisp/iimage.el --- 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