Each character position in a buffer or a string can have a text property list, much like the property list of a symbol (see Property Lists). The properties belong to a particular character at a particular place, such as, the letter ‘T’ at the beginning of this sentence or the first ‘o’ in ‘foo’—if the same character occurs in two different places, the two occurrences in general have different properties.
Each property has a name and a value. Both of these can be any Lisp
object, but the name is normally a symbol. Typically each property
name symbol is used for a particular purpose; for instance, the text
property face
specifies the faces for displaying the character
(see Properties with Special Meanings). The usual way to access the property
list is to specify a name and ask what value corresponds to it.
If a character has a category
property, we call it the
property category of the character. It should be a symbol. The
properties of the symbol serve as defaults for the properties of the
character.
Copying text between strings and buffers preserves the properties
along with the characters; this includes such diverse functions as
substring
, insert
, and buffer-substring
. Killing
and then yanking text (see The Kill Ring) also preserves the
properties, except that some properties are handled specially and
might be removed when text is yanked; see Yanking.