Skip to main content

9.4.1 Accessing Symbol Properties

The following functions can be used to access symbol properties.

function get symbol property

This function returns the value of the property named property in symbol’s property list. If there is no such property, it returns nil. Thus, there is no distinction between a value of nil and the absence of the property.

The name property is compared with the existing property names using eq, so any object is a legitimate property.

See put for an example.

function put symbol property value

This function puts value onto symbol’s property list under the property name property, replacing any previous property value. The put function returns value.

(put 'fly 'verb 'transitive)
(put 'fly 'noun '(a buzzing little bug))
⇒ (a buzzing little bug)
(get 'fly 'verb)
⇒ transitive
(symbol-plist 'fly)
⇒ (verb transitive noun (a buzzing little bug))

function symbol-plist symbol

This function returns the property list of symbol.

function setplist symbol plist

This function sets symbol’s property list to plist. Normally, plist should be a well-formed property list, but this is not enforced. The return value is plist.

(setplist 'foo '(a 1 b (2 3) c nil))
⇒ (a 1 b (2 3) c nil)
(symbol-plist 'foo)
⇒ (a 1 b (2 3) c nil)

For symbols in special obarrays, which are not used for ordinary purposes, it may make sense to use the property list cell in a nonstandard fashion; in fact, the abbrev mechanism does so (see Abbrevs).

You could define put in terms of setplist and plist-put, as follows:

(defun put (symbol prop value)
(setplist symbol
(plist-put (symbol-plist symbol) prop value)))

function function-get symbol property \&optional autoload

This function is identical to get, except that if symbol is the name of a function alias, it looks in the property list of the symbol naming the actual function. See Defining Functions. If the optional argument autoload is non-nil, and symbol is auto-loaded, this function will try to autoload it, since autoloading might set property of symbol. If autoload is the symbol macro, only try autoloading if symbol is an auto-loaded macro.

function function-put function property value

This function sets property of function to value. function should be a symbol. This function is preferred to calling put for setting properties of a function, because it will allow us some day to implement remapping of old properties to new ones.