diff options
| author | Pierre Courtieu | 2004-02-16 18:23:40 +0000 |
|---|---|---|
| committer | Pierre Courtieu | 2004-02-16 18:23:40 +0000 |
| commit | 9c0ede8422b8b3117773343e7192f2ee0864dba0 (patch) | |
| tree | 5137ed848a9c6dab9c28357168937e67ee744015 | |
| parent | b0f4bf630f1594621b24995479c2b32c008c3825 (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.el | 19 | ||||
| -rw-r--r-- | generic/span-overlay.el | 63 |
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) |
