summaryrefslogtreecommitdiff
path: root/lisp/textmodes
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>1995-03-14 00:33:40 +0000
committerRichard M. Stallman <rms@gnu.org>1995-03-14 00:33:40 +0000
commite41ae6f1279501f08e1031005e7c8666dd8231ae (patch)
treed723333f7149d0acc8f8dbd505a53c18ff5b4b61 /lisp/textmodes
parent85b2e0ee8874a5c770f506f1aef89d589d83e2ac (diff)
downloademacs-e41ae6f1279501f08e1031005e7c8666dd8231ae.tar.gz
*** empty log message ***
Diffstat (limited to 'lisp/textmodes')
-rw-r--r--lisp/textmodes/outline.el38
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."