diff lisp/textmodes/outline.el @ 33797:b5df14d31790

(outline-flag-region): Don't bind inhibit-read-only since we don't modify the buffer. (outline-isearch-open-invisible): Don't jump to overlay-start since we're trying to unhide text around point. (outline-discard-overlays): Use dolist.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 23 Nov 2000 00:04:36 +0000
parents 350d5ee0e430
children 77de13a8a918
line wrap: on
line diff
--- a/lisp/textmodes/outline.el	Wed Nov 22 23:00:41 2000 +0000
+++ b/lisp/textmodes/outline.el	Thu Nov 23 00:04:36 2000 +0000
@@ -383,16 +383,15 @@
 (defun outline-flag-region (from to flag)
   "Hides or shows lines from FROM to TO, according to FLAG.
 If FLAG is nil then text is shown, while if FLAG is t the text is hidden."
-  (let ((inhibit-read-only t))
-    (save-excursion
-      (goto-char from)
-      (end-of-line)
-      (outline-discard-overlays (point) to 'outline)
-      (if flag
-          (let ((o (make-overlay (point) to)))
-            (overlay-put o 'invisible 'outline)
-	    (overlay-put o 'isearch-open-invisible
-			 'outline-isearch-open-invisible)))))
+  (save-excursion
+    (goto-char from)
+    (end-of-line)
+    (outline-discard-overlays (point) to 'outline)
+    (if flag
+	(let ((o (make-overlay (point) to)))
+	  (overlay-put o 'invisible 'outline)
+	  (overlay-put o 'isearch-open-invisible
+		       'outline-isearch-open-invisible))))
   (run-hooks 'outline-view-change-hook))
 
 
@@ -400,9 +399,8 @@
 ;; to the overlay that makes the outline invisible (see
 ;; `outline-flag-region').
 (defun outline-isearch-open-invisible (overlay)
-  (save-excursion
-    (goto-char (overlay-start overlay))
-    (show-entry)))
+  ;; We rely on the fact that isearch places point one the matched text.
+  (show-entry))
 
 
 ;; Exclude from the region BEG ... END all overlays
@@ -414,26 +412,21 @@
   (if (< end beg)
       (setq beg (prog1 end (setq end beg))))
   (save-excursion
-    (let ((overlays (overlays-in beg end))
-	  o
-	  o1)
-      (while overlays
-	(setq o (car overlays))
-	(if (eq (overlay-get o 'invisible) prop)
-	    ;; Either push this overlay outside beg...end
-	    ;; or split it to exclude beg...end
-	    ;; or delete it entirely (if it is contained in beg...end).
-	    (if (< (overlay-start o) beg)
-		(if (> (overlay-end o) end)
-		    (progn
-		      (setq o1 (outline-copy-overlay o))
-		      (move-overlay o1 (overlay-start o1) beg)
-		      (move-overlay o end (overlay-end o)))
-		  (move-overlay o (overlay-start o) beg))
+    (dolist (o (overlays-in beg end))
+      (if (eq (overlay-get o 'invisible) prop)
+	  ;; Either push this overlay outside beg...end
+	  ;; or split it to exclude beg...end
+	  ;; or delete it entirely (if it is contained in beg...end).
+	  (if (< (overlay-start o) beg)
 	      (if (> (overlay-end o) end)
-		  (move-overlay o end (overlay-end o))
-		(delete-overlay o))))
-	(setq overlays (cdr overlays))))))
+		  (progn
+		    (move-overlay (outline-copy-overlay o)
+				  (overlay-start o) beg)
+		    (move-overlay o end (overlay-end o)))
+		(move-overlay o (overlay-start o) beg))
+	    (if (> (overlay-end o) end)
+		(move-overlay o end (overlay-end o))
+	      (delete-overlay o))))))))
 
 ;; Make a copy of overlay O, with the same beginning, end and properties.
 (defun outline-copy-overlay (o)