comparison lisp/textmodes/outline.el @ 16678:9785672a3b84

(outline-discard-overlays): Use overlays-in, to ensure we get rid of empty overlays.
author Richard M. Stallman <rms@gnu.org>
date Sat, 14 Dec 1996 22:24:35 +0000
parents d01e58c9e431
children cf25d78ebd75
comparison
equal deleted inserted replaced
16677:e5d1cfd4d29c 16678:9785672a3b84
384 ;; Overlays without a non-nil PROP property are not touched. 384 ;; Overlays without a non-nil PROP property are not touched.
385 (defun outline-discard-overlays (beg end prop) 385 (defun outline-discard-overlays (beg end prop)
386 (if (< end beg) 386 (if (< end beg)
387 (setq beg (prog1 end (setq end beg)))) 387 (setq beg (prog1 end (setq end beg))))
388 (save-excursion 388 (save-excursion
389 (goto-char beg) 389 (let ((overlays (overlays-in beg end)))
390 (while (< (point) end) 390 (while overlays
391 (let ((overlays (overlays-at (point)))) 391 (let ((o (car overlays)))
392 (while overlays 392 (if (overlay-get o prop)
393 (let ((o (car overlays))) 393 ;; Either push this overlay outside beg...end
394 (if (overlay-get o prop) 394 ;; or split it to exclude beg...end
395 ;; Either push this overlay outside beg...end 395 ;; or delete it entirely (if it is contained in beg...end).
396 ;; or split it to exclude beg...end 396 (if (< (overlay-start o) beg)
397 ;; or delete it entirely (if it is contained in beg...end).
398 (if (< (overlay-start o) beg)
399 (if (> (overlay-end o) end)
400 (let ((o1 (outline-copy-overlay o)))
401 (move-overlay o1 (overlay-start o1) beg)
402 (move-overlay o (overlay-start o) beg)))
403 (if (> (overlay-end o) end) 397 (if (> (overlay-end o) end)
404 (move-overlay o end (overlay-end o)) 398 (let ((o1 (outline-copy-overlay o)))
405 (delete-overlay o))))) 399 (move-overlay o1 (overlay-start o1) beg)
406 (setq overlays (cdr overlays)))) 400 (move-overlay o (overlay-start o) beg)))
407 (goto-char (next-overlay-change (point)))))) 401 (if (> (overlay-end o) end)
402 (move-overlay o end (overlay-end o))
403 (delete-overlay o)))))
404 (setq overlays (cdr overlays))))))
408 405
409 ;; Make a copy of overlay O, with the same beginning, end and properties. 406 ;; Make a copy of overlay O, with the same beginning, end and properties.
410 (defun outline-copy-overlay (o) 407 (defun outline-copy-overlay (o)
411 (let ((o1 (make-overlay (overlay-start o) (overlay-end o) 408 (let ((o1 (make-overlay (overlay-start o) (overlay-end o)
412 (overlay-buffer o))) 409 (overlay-buffer o)))