From 277e67418184c2e7d75ac317da095880c981ccd9 Mon Sep 17 00:00:00 2001 From: Martin Pohlack Date: Mon, 7 Jun 2010 17:01:23 -0400 Subject: [PATCH] * lisp/iimage.el: Remove images as soon as the underlying text is modified. (iimage-modification-hook): New function. (iimage-mode-buffer): Use it. --- lisp/ChangeLog | 10 ++++++++-- lisp/ChangeLog.13 | 2 +- lisp/iimage.el | 35 +++++++++++++++++++++++++---------- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fd2f42c7b00..2f324e5ee04 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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 --git a/lisp/ChangeLog.13 b/lisp/ChangeLog.13 index d219c7a5660..da88e3334c2 100644 --- a/lisp/ChangeLog.13 +++ b/lisp/ChangeLog.13 @@ -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 --git a/lisp/iimage.el b/lisp/iimage.el index 87591724dbb..1c9b092738b 100644 --- a/lisp/iimage.el +++ b/lisp/iimage.el @@ -101,6 +101,19 @@ Examples of image filename regexps: (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 @@ Examples of image filename regexps: (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 -- 2.39.2