aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Courtieu2004-02-16 18:23:40 +0000
committerPierre Courtieu2004-02-16 18:23:40 +0000
commit9c0ede8422b8b3117773343e7192f2ee0864dba0 (patch)
tree5137ed848a9c6dab9c28357168937e67ee744015
parentb0f4bf630f1594621b24995479c2b32c008c3825 (diff)
I added some utility functions in generic/span-overlays.el and
generic/span-extent.el. This is for my "holes" feature integration.
-rw-r--r--generic/span-extent.el19
-rw-r--r--generic/span-overlay.el63
2 files changed, 82 insertions, 0 deletions
diff --git a/generic/span-extent.el b/generic/span-extent.el
index ffc00ca2..8f72bead 100644
--- a/generic/span-extent.el
+++ b/generic/span-extent.el
@@ -100,5 +100,24 @@ A span is before PT if it covers the character before PT."
(defalias 'span-object 'extent-object)
(defalias 'span-string 'extent-string)
+;Pierre: new untility functions for "holes"
+(defsubst fold-spans (FUNCTION &optional OBJECT FROM TO MAPARG FLAGS PROPERTY VALUE)
+ "map on span, see map-extent on xemacs"
+ (map-extents FUNCTION OBJECT FROM TO MAPARG FLAGS PROPERTY VALUE)
+)
+
+(defsubst set-span-properties (span plist)
+ "see extent-properties"
+ (set-extent-properties span plist)
+)
+
+(defsubst set-span-keymap (span kmap)
+ (set-extent-keymap span kmap)
+ )
+
+;there are more args to extent-at-event
+(defsubst span-at-event (event)
+ (extent-at-event event)
+ )
(provide 'span-extent)
diff --git a/generic/span-overlay.el b/generic/span-overlay.el
index 1b9d4646..1e910baa 100644
--- a/generic/span-overlay.el
+++ b/generic/span-overlay.el
@@ -314,4 +314,67 @@ Behaviour is still worse than before."
(with-current-buffer (overlay-buffer span)
(buffer-substring (overlay-start span) (overlay-end span))))
+
+;Pierre: new untility functions for "holes"
+(defun set-span-properties (span plist)
+ "Set SPAN's properties, plist is a plist."
+ (let ((pl plist))
+ (while pl
+ (let* ((name (car pl))
+ (value (car (cdr pl))))
+ (overlay-put span name value)
+ (setq pl (cdr (cdr pl))))
+ )
+ )
+ )
+
+(defsubst span-at-event (event)
+ (car (overlays-at (posn-point (event-start event))))
+ )
+
+
+(defun make-detached-span ()
+ "Make a span for the range [START, END) in current buffer."
+ (add-span (make-overlay 0 0))
+ )
+
+;hack
+(defun fold-spans-aux (f l &optional FROM MAPARGS)
+ (cond ((and l
+ (or (span-detached-p l)
+ (>= (span-start l) (or FROM (point-min)))))
+ (cons (funcall f l MAPARGS)
+ (fold-spans-aux f (span-property l 'before) FROM MAPARGS)))
+ (t ())))
+
+(defun fold-spans (f &optional BUFFER FROM TO DUMMY1 DUMMY2 DUMMY3)
+ (save-excursion
+ (set-buffer (or BUFFER (current-buffer)))
+ (car (or (last (fold-spans-aux f before-list FROM))))
+ )
+ )
+
+(defsubst span-buffer (span)
+ "Return the buffer owning span"
+ (overlay-buffer span)
+ )
+
+(defsubst span-detached-p (span)
+ "is this span detached? nil for no, t for yes"
+ ;(or
+ (eq (span-buffer span) nil)
+ ; this should not be necessary
+ ;(= (span-start span) (span-end span)))
+ )
+
+(defsubst set-span-face (span face)
+ "set the face of a span"
+ (overlay-put span 'face face)
+ )
+
+(defsubst set-span-keymap (span kmap)
+ "set the face of a span"
+ (overlay-put span 'keymap kmap)
+ )
+
(provide 'span-overlay)