Mercurial > emacs
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))) |