Improve documentation for display property functions

Specifically, use the term "display specification" more consistently to
distinguish from "display property", which is the full value of the
'display' text property.

* src/xdisp.c (find_display_property): Rename PROP to SPEC.
(Fget_display_property): Rename PROP to SPEC and improve docstring.

* lisp/emacs-lisp/subr-x.el (add-display-text-property): Rename PROP to
SPEC and improve docstring.

* doc/lispref/display.texi (Display Property): Reword documentation to
more-consistently refer to display specifications.
This commit is contained in:
Jim Porter 2025-05-31 12:11:01 -07:00
parent 4a3c8e6e1d
commit 24e6cd4233
3 changed files with 47 additions and 46 deletions

View file

@ -5260,29 +5260,29 @@ Properties}.
specification, or a list or vector containing several display
specifications.
@defun get-display-property position prop &optional object properties
This convenience function can be used to get a specific display
property, no matter whether the @code{display} property is a vector, a
list or a simple property. This is like @code{get-text-property}
(@pxref{Examining Properties}), but works on the @code{display} property
only. For properties with a single value (e.g.@: @code{height}, this
returns the value itself; for properties with a list of values (e.g.@:
@code{slice}), this returns the list of values.
@defun get-display-property position spec &optional object properties
This convenience function can be used to get the value of a specific
display specification, no matter whether the @code{display} property is
a vector, a list or a single display specification. This is like
@code{get-text-property} (@pxref{Examining Properties}), but works on
the @code{display} property only. For specifications with a single
value (e.g.@: @code{height}), this returns the value itself; for
properties with a list of values (e.g.@: @code{slice}), this returns the
list of values.
@var{position} is the position in the buffer or string to examine, and
@var{prop} is the @code{display} property to return. The optional
@var{object} argument should be either a string or a buffer, and
defaults to the current buffer. If the optional @var{properties}
argument is non-@code{nil}, it should be a @code{display} property,
and in that case, @var{position} and @var{object} are ignored. (This
can be useful if you've already gotten the @code{display} property
with @code{get-char-property}, for instance (@pxref{Examining
Properties}).
@var{spec} is the @sc{car} of the display specification to return. The
optional @var{object} argument should be either a string or a buffer,
and defaults to the current buffer. If the optional @var{properties}
argument is non-@code{nil}, it should be a @code{display} property, and
in that case, @var{position} and @var{object} are ignored. (This can be
useful if you've already gotten the @code{display} property with
@code{get-char-property}, for instance (@pxref{Examining Properties}).
@end defun
@defun add-display-text-property start end prop value &optional object
Add @code{display} property @var{prop} of @var{value} to the text from
@var{start} to @var{end}.
@defun add-display-text-property start end spec value &optional object
Add the display specification @code{(@var{prop} @var{value})} to the
text from @var{start} to @var{end}.
If any text in the region has a non-@code{nil} @code{display}
property, those properties are retained. For instance:
@ -5293,13 +5293,13 @@ property, those properties are retained. For instance:
@end lisp
After doing this, the region from 2 to 4 will have the @code{raise}
@code{display} property, the region from 4 to 8 will have both the
@code{raise} and @code{height} @code{display} properties, and finally
the region from 8 to 12 will only have the @code{raise} @code{display}
property.
display specification, the region from 4 to 8 will have both the
@code{raise} and @code{height} display specifications, and finally the
region from 8 to 12 will only have the @code{raise} display
specification.
If @var{object} is non-@code{nil}, it should be a string or a buffer.
If @code{nil}, this defaults to the current buffer.
@var{object} is either a string or a buffer to add the specification to.
If omitted, @var{object} defaults to the current buffer.
@end defun
@cindex display property, unsafe evaluation

View file

@ -417,14 +417,13 @@ indivisible unit."
(nreverse result)))
;;;###autoload
(defun add-display-text-property (start end prop value
&optional object)
"Add display property PROP with VALUE to the text from START to END.
If any text in the region has a non-nil `display' property, those
properties are retained.
(defun add-display-text-property (start end spec value &optional object)
"Add the display specification (SPEC VALUE) to the text from START to END.
If any text in the region has a non-nil `display' property, the existing
display specifications are retained.
If OBJECT is non-nil, it should be a string or a buffer. If nil,
this defaults to the current buffer."
OBJECT is either a string or a buffer to add the specification to.
If omitted, OBJECT defaults to the current buffer."
(let ((sub-start start)
(sub-end 0)
disp)
@ -435,7 +434,7 @@ this defaults to the current buffer."
(min end (point-max)))))
(if (not (setq disp (get-text-property sub-start 'display object)))
;; No old properties in this range.
(put-text-property sub-start sub-end 'display (list prop value)
(put-text-property sub-start sub-end 'display (list spec value)
object)
;; We have old properties.
(let (type)
@ -455,14 +454,14 @@ this defaults to the current buffer."
(setq type 'list)
disp)))
;; Remove any old instances.
(when-let* ((old (assoc prop disp)))
(when-let* ((old (assoc spec disp)))
;; If the property value was a list, don't modify the
;; original value in place; it could be used by other
;; regions of text.
(setq disp (if (eq type 'list)
(remove old disp)
(delete old disp))))
(setq disp (cons (list prop value) disp))
(setq disp (cons (list spec value) disp))
(when (eq type 'vector)
(setq disp (seq-into disp 'vector)))
;; Finally update the range.

View file

@ -5570,7 +5570,7 @@ setup_for_ellipsis (struct it *it, int len)
static Lisp_Object
find_display_property (Lisp_Object disp, Lisp_Object prop)
find_display_property (Lisp_Object disp, Lisp_Object spec)
{
Lisp_Object elem;
if (NILP (disp))
@ -5583,7 +5583,7 @@ find_display_property (Lisp_Object disp, Lisp_Object prop)
elem = AREF (disp, i);
if (CONSP (elem)
&& CONSP (XCDR (elem))
&& EQ (XCAR (elem), prop))
&& EQ (XCAR (elem), spec))
goto found;
}
return Qnil;
@ -5597,7 +5597,7 @@ find_display_property (Lisp_Object disp, Lisp_Object prop)
elem = XCAR (disp);
if (CONSP (elem)
&& CONSP (XCDR (elem))
&& EQ (XCAR (elem), prop))
&& EQ (XCAR (elem), spec))
goto found;
/* Check that we have a proper list before going to the next
@ -5612,7 +5612,7 @@ find_display_property (Lisp_Object disp, Lisp_Object prop)
/* A simple display spec. */
else if (CONSP (disp)
&& CONSP (XCDR (disp))
&& EQ (XCAR (disp), prop))
&& EQ (XCAR (disp), spec))
{
elem = disp;
goto found;
@ -5753,13 +5753,15 @@ display_min_width (struct it *it, ptrdiff_t charpos,
DEFUN ("get-display-property", Fget_display_property,
Sget_display_property, 2, 4, 0,
doc: /* Get the value of the `display' property PROP at POSITION.
If OBJECT, this should be a buffer or string where the property is
fetched from. If omitted, OBJECT defaults to the current buffer.
doc: /* Get the value of the display specification SPEC at POSITION.
SPEC is the car of the display specification to fetch, e.g. `height'.
If PROPERTIES, look for value of PROP in PROPERTIES instead of the
properties at POSITION. */)
(Lisp_Object position, Lisp_Object prop, Lisp_Object object,
OBJECT is either a string or a buffer to fetch the specification from.
If omitted, OBJECT defaults to the current buffer.
If PROPERTIES is non-nil, look for value of SPEC in PROPERTIES instead
of the properties at POSITION. */)
(Lisp_Object position, Lisp_Object spec, Lisp_Object object,
Lisp_Object properties)
{
if (NILP (properties))
@ -5767,7 +5769,7 @@ properties at POSITION. */)
else
CHECK_LIST (properties);
return find_display_property (properties, prop);
return find_display_property (properties, spec);
}