changeset 41618:812e52cc5162

(copy-overlay, remove-overlays): New funs.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 28 Nov 2001 04:03:53 +0000
parents fde712c2fd73
children 270ae8c49bbc
files lisp/subr.el
diffstat 1 files changed, 36 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Wed Nov 28 03:06:45 2001 +0000
+++ b/lisp/subr.el	Wed Nov 28 04:03:53 2001 +0000
@@ -993,7 +993,7 @@
   (if all (save-excursion (set-buffer (other-buffer))))
   (set-buffer-modified-p (buffer-modified-p)))
 
-(defun momentary-string-display (string pos &optional exit-char message) 
+(defun momentary-string-display (string pos &optional exit-char message)
   "Momentarily display STRING in the buffer at POS.
 Display remains until next character is typed.
 If the char is EXIT-CHAR (optional third arg, default is SPC) it is swallowed;
@@ -1037,6 +1037,41 @@
       (set-buffer-modified-p modified))))
 
 
+;;;; Overlay operations
+
+(defun copy-overlay (o)
+  "Return a copy of overlay O."
+  (let ((o1 (make-overlay (overlay-start o) (overlay-end o)
+			  ;; FIXME: there's no easy way to find the
+			  ;; insertion-type of the two markers.
+			  (overlay-buffer o)))
+	(props (overlay-properties o)))
+    (while props
+      (overlay-put o1 (pop props) (pop props)))
+    o1))
+
+(defun remove-overlays (beg end name val)
+  "Clear BEG and END of overlays whose property NAME has value VAL.
+Overlays might be moved and or split."
+  (if (< end beg)
+      (setq beg (prog1 end (setq end beg))))
+  (save-excursion
+    (dolist (o (overlays-in beg end))
+      (when (eq (overlay-get o name) val)
+	;; 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
+		  (move-overlay (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)))))))
+
 ;;;; Miscellanea.
 
 ;; A number of major modes set this locally.