summaryrefslogtreecommitdiff
path: root/src/textprop.c
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>2000-10-25 05:14:01 +0000
committerMiles Bader <miles@gnu.org>2000-10-25 05:14:01 +0000
commit8d41abc445741cb74d059e78f56f999f5215c4e1 (patch)
treea51837ff6c3430871df1f778246d454c96c114bf /src/textprop.c
parentbeed66fe1867101fff9f71c5130678011291e6aa (diff)
downloademacs-8d41abc445741cb74d059e78f56f999f5215c4e1.tar.gz
(get_char_property_and_overlay): New function.
(Fget_char_property): Use it.
Diffstat (limited to 'src/textprop.c')
-rw-r--r--src/textprop.c52
1 files changed, 41 insertions, 11 deletions
diff --git a/src/textprop.c b/src/textprop.c
index bf4e5efc2b3..03e4b477b35 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -557,17 +557,22 @@ If POSITION is at the end of OBJECT, the value is nil.")
return textget (Ftext_properties_at (position, object), prop);
}
-DEFUN ("get-char-property", Fget_char_property, Sget_char_property, 2, 3, 0,
- "Return the value of POSITION's property PROP, in OBJECT.\n\
-OBJECT is optional and defaults to the current buffer.\n\
-If POSITION is at the end of OBJECT, the value is nil.\n\
-If OBJECT is a buffer, then overlay properties are considered as well as\n\
-text properties.\n\
-If OBJECT is a window, then that window's buffer is used, but window-specific\n\
-overlays are considered only if they are associated with OBJECT.")
- (position, prop, object)
+/* Return the value of POSITION's property PROP, in OBJECT.
+ OBJECT is optional and defaults to the current buffer.
+ If OVERLAY is non-0, then in the case that the returned property is from
+ an overlay, the overlay found is returned in *OVERLAY, otherwise nil is
+ returned in *OVERLAY.
+ If POSITION is at the end of OBJECT, the value is nil.
+ If OBJECT is a buffer, then overlay properties are considered as well as
+ text properties.
+ If OBJECT is a window, then that window's buffer is used, but
+ window-specific overlays are considered only if they are associated
+ with OBJECT. */
+Lisp_Object
+get_char_property_and_overlay (position, prop, object, overlay)
Lisp_Object position, object;
register Lisp_Object prop;
+ Lisp_Object *overlay;
{
struct window *w = 0;
@@ -617,12 +622,37 @@ overlays are considered only if they are associated with OBJECT.")
{
tem = Foverlay_get (overlay_vec[noverlays], prop);
if (!NILP (tem))
- return (tem);
+ {
+ if (overlay)
+ /* Return the overlay we got the property from. */
+ *overlay = overlay_vec[noverlays];
+ return tem;
+ }
}
}
+
+ if (overlay)
+ /* Indicate that the return value is not from an overlay. */
+ *overlay = Qnil;
+
/* Not a buffer, or no appropriate overlay, so fall through to the
simpler case. */
- return (Fget_text_property (position, prop, object));
+ return Fget_text_property (position, prop, object);
+}
+
+DEFUN ("get-char-property", Fget_char_property, Sget_char_property, 2, 3, 0,
+ "Return the value of POSITION's property PROP, in OBJECT.\n\
+OBJECT is optional and defaults to the current buffer.\n\
+If POSITION is at the end of OBJECT, the value is nil.\n\
+If OBJECT is a buffer, then overlay properties are considered as well as\n\
+text properties.\n\
+If OBJECT is a window, then that window's buffer is used, but window-specific\n\
+overlays are considered only if they are associated with OBJECT.")
+ (position, prop, object)
+ Lisp_Object position, object;
+ register Lisp_Object prop;
+{
+ return get_char_property_and_overlay (position, prop, object, 0);
}
DEFUN ("next-char-property-change", Fnext_char_property_change,