diff options
author | Richard M. Stallman <rms@gnu.org> | 1995-03-14 00:33:40 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1995-03-14 00:33:40 +0000 |
commit | e41ae6f1279501f08e1031005e7c8666dd8231ae (patch) | |
tree | d723333f7149d0acc8f8dbd505a53c18ff5b4b61 /lisp/textmodes | |
parent | 85b2e0ee8874a5c770f506f1aef89d589d83e2ac (diff) | |
download | emacs-e41ae6f1279501f08e1031005e7c8666dd8231ae.tar.gz |
*** empty log message ***
Diffstat (limited to 'lisp/textmodes')
-rw-r--r-- | lisp/textmodes/outline.el | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/lisp/textmodes/outline.el b/lisp/textmodes/outline.el index d56df6a1ff6..47194a1c52d 100644 --- a/lisp/textmodes/outline.el +++ b/lisp/textmodes/outline.el @@ -357,7 +357,43 @@ If FLAG is nil then text is shown, while if FLAG is t the text is hidden." (save-excursion (goto-char from) (end-of-line) - (put-text-property (point) to 'invisible flag)))) + (outline-discard-overlays (point) to 'outline) + (if flag + (let ((o (make-overlay (point) to))) + (overlay-put o 'invisible flag) + (overlay-put o 'outline t)))))) + +(defun outline-discard-overlays (beg end prop) + (if (< end beg) + (setq beg (prog1 end (setq end beg)))) + (save-excursion + (goto-char beg) + (while (< (point) end) + (let ((overlays (overlays-at (point)))) + (while overlays + (let ((o (car overlays))) + (if (overlay-get o 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) + (let ((o1 (outline-copy-overlay o))) + (move-overlay o1 (overlay-start o1) beg) + (move-overlay o (overlay-start o) beg))) + (if (> (overlay-end o) end) + (move-overlay o end (overlay-end o)) + (delete-overlay o))))) + (setq overlays (cdr overlays)))) + (goto-char (next-overlay-change (point)))))) + +(defun outline-copy-overlay (o) + (let ((o1 (make-overlay (overlay-start o) (overlay-end o))) + (props (overlay-properties o))) + (while props + (overlay-put o1 (car props) (nth 1 props)) + (setq props (cdr (cdr props)))) + o1)) (defun hide-entry () "Hide the body directly following this heading." |