changeset 45428:ac7e0cc03aed

(reveal-post-command): Reverse the semantics of reveal-toggle-invisible and support isearch-open-invisible-temporary.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 20 May 2002 18:31:20 +0000
parents 9133a6a4abf8
children 5d3b861665f0
files lisp/reveal.el
diffstat 1 files changed, 26 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/reveal.el	Mon May 20 18:28:09 2002 +0000
+++ b/lisp/reveal.el	Mon May 20 18:31:20 2002 +0000
@@ -68,6 +68,7 @@
   ;; - we only refresh spots in the current window.
   ;; FIXME: do we actually know that (current-buffer) = (window-buffer) ?
   (with-local-quit
+  (condition-case err
    (let* ((spots (cvs-partition
 		  (lambda (x)
 		    ;; We refresh any spot in the current window as well
@@ -79,11 +80,7 @@
 				 (current-buffer)))))
 		  reveal-open-spots))
 	  (old-ols (mapcar 'cdr (car spots)))
-	  (repeat t)
-	  ;; `post-command-hook' binds it to t, but the user might want to
-	  ;; interrupt our work if we somehow get stuck in an infinite loop.
-	  (inhibit-quit nil)
-	  inv open)
+	  (repeat t))
      (setq reveal-open-spots (cdr spots))
      ;; Open new overlays.
      (while repeat
@@ -93,23 +90,27 @@
 			  (overlays-at (point))))
 	 (push (cons (selected-window) ol) reveal-open-spots)
 	 (setq old-ols (delq ol old-ols))
-	 (when (setq inv (overlay-get ol 'invisible))
-	   (when (or (overlay-get ol 'isearch-open-invisible)
-		     (and (consp buffer-invisibility-spec)
-			  (assq inv buffer-invisibility-spec)))
-	     (overlay-put ol 'reveal-invisible inv)
-	     (overlay-put ol 'invisible nil)
-	     (when (setq open (get inv 'reveal-toggle-invisible))
+	 (let ((open (overlay-get ol 'reveal-toggle-invisible)))
+	   (when (or open
+		     (let ((inv (overlay-get ol 'invisible)))
+		       (and inv (symbolp inv)
+			    (or (setq open (or (get inv 'reveal-toggle-invisible)
+					       (get ol 'isearch-open-invisible-temporary)))
+				(overlay-get ol 'isearch-open-invisible)
+				(and (consp buffer-invisibility-spec)
+				     (assq inv buffer-invisibility-spec)))
+			    (overlay-put ol 'reveal-invisible inv))))
+	     (if (null open)
+		 (overlay-put ol 'invisible nil)
 	       ;; Use the provided opening function and repeat (since the
 	       ;; opening function might have hidden a subpart around point).
 	       (setq repeat t)
 	       (condition-case err
-		   (funcall open ol t)
+		   (funcall open ol nil)
 		 (error (message "!!Reveal-show: %s !!" err))))))))
      ;; Close old overlays.
      (dolist (ol old-ols)
-       (when (and (setq inv (overlay-get ol 'reveal-invisible))
-		  (eq (current-buffer) (overlay-buffer ol))
+       (when (and (eq (current-buffer) (overlay-buffer ol))
 		  (not (rassq ol reveal-open-spots)))
 	 (if (and (>= (point) (save-excursion
 				(goto-char (overlay-start ol))
@@ -120,11 +121,16 @@
 	     ;; Still near the overlay: keep it open.
 	     (push (cons (selected-window) ol) reveal-open-spots)
 	   ;; Really close it.
-	   (overlay-put ol 'invisible inv)
-	   (when (setq open (get inv 'reveal-toggle-invisible))
-	     (condition-case err
-		 (funcall open ol nil)
-	       (error (message "!!Reveal-hide: %s !!" err))))))))))
+	   (let ((open (overlay-get ol 'reveal-toggle-invisible)) inv)
+	     (if (or open
+		     (and (setq inv (overlay-get ol 'reveal-invisible))
+			  (setq open (or (get inv 'reveal-toggle-invisible)
+					 (get ol 'isearch-open-invisible-temporary)))))
+		 (condition-case err
+		     (funcall open ol t)
+		   (error (message "!!Reveal-hide: %s !!" err)))
+	       (overlay-put ol 'invisible inv)))))))
+   (error (message "Reveal: %s" err)))))
 
 ;;;###autoload
 (define-minor-mode reveal-mode