Next: , Previous: Property Search, Up: Text Properties


32.19.4 Properties with Special Meanings

Here is a table of text property names that have special built-in meanings. The following sections list a few additional special property names that control filling and property inheritance. All other names have no standard meaning, and you can use them as you like.

category
If a character has a category property, we call it the category of the character. It should be a symbol. The properties of the symbol serve as defaults for the properties of the character.
face
You can use the property face to control the font and color of text. See Faces, for more information.

In the simplest case, the value is a face name. It can also be a list; then each element can be any of these possibilities;

You can use Font Lock Mode (see Font Lock Mode), to dynamically update face properties based on the contents of the text.

font-lock-face
The font-lock-face property is the same in all respects as the face property, but its state of activation is controlled by font-lock-mode. This can be advantageous for special buffers which are not intended to be user-editable, or for static areas of text which are always fontified in the same way. See Precalculated Fontification.

Strictly speaking, font-lock-face is not a built-in text property; rather, it is implemented in Font Lock mode using char-property-alias-alist. See Examining Properties.

This property is new in Emacs 22.1.

mouse-face
The property mouse-face is used instead of face when the mouse is on or near the character. For this purpose, “near” means that all text between the character and where the mouse is have the same mouse-face property value.
fontified
This property says whether the character has a face assigned to it by font locking. The display engine tests it to decide whether a buffer portion needs refontifying before display. See Auto Faces. It takes one of three values:
nil
Font locking is disabled, or the character's face property, if any, is invalid.
defer
This value is only used when “just in time” font locking is enabled and it means that the character's face property is invalid and needs deferred fontification.
t
The character's face property, or absence of one, is valid.

display
This property activates various features that change the way text is displayed. For example, it can make text appear taller or shorter, higher or lower, wider or narrow, or replaced with an image. See Display Property.
help-echo
If text has a string as its help-echo property, then when you move the mouse onto that text, Emacs displays that string in the echo area, or in the tooltip window (see Tooltips↗).

If the value of the help-echo property is a function, that function is called with three arguments, window, object and pos and should return a help string or nil for none. The first argument, window is the window in which the help was found. The second, object, is the buffer, overlay or string which had the help-echo property. The pos argument is as follows:

If the value of the help-echo property is neither a function nor a string, it is evaluated to obtain a help string.

You can alter the way help text is displayed by setting the variable show-help-function (see Help display).

This feature is used in the mode line and for other active text.

keymap
The keymap property specifies an additional keymap for commands. When this keymap applies, it is used for key lookup before the minor mode keymaps and before the buffer's local map. See Active Keymaps. If the property value is a symbol, the symbol's function definition is used as the keymap.

The property's value for the character before point applies if it is non-nil and rear-sticky, and the property's value for the character after point applies if it is non-nil and front-sticky. (For mouse clicks, the position of the click is used instead of the position of point.)

local-map
This property works like keymap except that it specifies a keymap to use instead of the buffer's local map. For most purposes (perhaps all purposes), it is better to use the keymap property.
syntax-table
The syntax-table property overrides what the syntax table says about this particular character. See Syntax Properties.
read-only
If a character has the property read-only, then modifying that character is not allowed. Any command that would do so gets an error, text-read-only. If the property value is a string, that string is used as the error message.

Insertion next to a read-only character is an error if inserting ordinary text there would inherit the read-only property due to stickiness. Thus, you can control permission to insert next to read-only text by controlling the stickiness. See Sticky Properties.

Since changing properties counts as modifying the buffer, it is not possible to remove a read-only property unless you know the special trick: bind inhibit-read-only to a non-nil value and then remove the property. See Read Only Buffers.

invisible
A non-nil invisible property can make a character invisible on the screen. See Invisible Text, for details.
intangible
If a group of consecutive characters have equal and non-nil intangible properties, then you cannot place point between them. If you try to move point forward into the group, point actually moves to the end of the group. If you try to move point backward into the group, point actually moves to the start of the group.

When the variable inhibit-point-motion-hooks is non-nil, the intangible property is ignored.

field
Consecutive characters with the same field property constitute a field. Some motion functions including forward-word and beginning-of-line stop moving at a field boundary. See Fields.
cursor
Normally, the cursor is displayed at the end of any overlay and text property strings present at the current window position. You can place the cursor on any desired character of these strings by giving that character a non-nil cursor text property.
pointer
This specifies a specific pointer shape when the mouse pointer is over this text or image. See Pointer Shape, for possible pointer shapes.
line-spacing
A newline can have a line-spacing text or overlay property that controls the height of the display line ending with that newline. The property value overrides the default frame line spacing and the buffer local line-spacing variable. See Line Height.
line-height
A newline can have a line-height text or overlay property that controls the total height of the display line ending in that newline. See Line Height.
modification-hooks
If a character has the property modification-hooks, then its value should be a list of functions; modifying that character calls all of those functions. Each function receives two arguments: the beginning and end of the part of the buffer being modified. Note that if a particular modification hook function appears on several characters being modified by a single primitive, you can't predict how many times the function will be called.

If these functions modify the buffer, they should bind inhibit-modification-hooks to t around doing so, to avoid confusing the internal mechanism that calls these hooks.

insert-in-front-hooks
insert-behind-hooks
The operation of inserting text in a buffer also calls the functions listed in the insert-in-front-hooks property of the following character and in the insert-behind-hooks property of the preceding character. These functions receive two arguments, the beginning and end of the inserted text. The functions are called after the actual insertion takes place.

See also Change Hooks, for other hooks that are called when you change text in a buffer.

point-entered
point-left
The special properties point-entered and point-left record hook functions that report motion of point. Each time point moves, Emacs compares these two property values:

If these two values differ, each of them is called (if not nil) with two arguments: the old value of point, and the new one.

The same comparison is made for the characters before the old and new locations. The result may be to execute two point-left functions (which may be the same function) and/or two point-entered functions (which may be the same function). In any case, all the point-left functions are called first, followed by all the point-entered functions.

It is possible with char-after to examine characters at various buffer positions without moving point to those positions. Only an actual change in the value of point runs these hook functions.

— Variable: inhibit-point-motion-hooks

When this variable is non-nil, point-left and point-entered hooks are not run, and the intangible property has no effect. Do not set this variable globally; bind it with let.

— Variable: show-help-function

If this variable is non-nil, it specifies a function called to display help strings. These may be help-echo properties, menu help strings (see Simple Menu Items, see Extended Menu Items), or tool bar help strings (see Tool Bar). The specified function is called with one argument, the help string to display. Tooltip mode (see Tooltips↗) provides an example.


Xah Signet