Previous: Highlight Func Mode, Up: Using Semantic

### 2.10 Tag Decoration Mode

Semantic Tag Decoration mode “decorates” each tag based on certain arbitrary features of that tag. Decorations are specified using the variable `semantic-decoration-styles`.

— Command: global-semantic-decoration-mode &optional arg

> Toggle Semantic Tag Decoration mode in all Semantic-enabled buffers. With an optional argument arg, enable if arg is positive, and disable otherwise.

— Variable: semantic-decoration-styles

> The value of this variable is a list of decoration styles for Semantic Tag Decoration mode. Each element in this list should have the form `(`name `.` flag`)`, where name is a style name (a symbol) and flag is non-`nil` if the style is enabled.

> The following styles are available:

> `semantic-tag-boundary`
>   Place an overline in front of each long tag (excluding prototypes).
> `semantic-decoration-on-private-members`
>   Highlight class members that are designated as private.
> `semantic-decoration-on-protected-members`
>   Highlight class members that are designated as protected.
> `semantic-decoration-on-includes`
>   Highlight class members that are includes. Clicking on the highlighted include statements opens a context menu for configuring Semantic includes.

To enable or disable specific decorations, use this function:

— Command: semantic-toggle-decoration-style name &optional arg

> Prompt for a decoration style, name, and turn it on or off. With prefix argument arg, turn on if positive, otherwise off. Return non-`nil` if the decoration style is enabled.

— Face: semantic-tag-boundary-face

> Face for long tags in the `semantic-tag-boundary` decoration style.

— Face: semantic-decoration-on-private-members-face

> Face for privately-scoped tags in the `semantic-decoration-on-private-members` decoration style.

— Face: semantic-decoration-on-protected-members-face

> Face for protected tags in the `semantic-decoration-on-protected-members` decoration style.

— Face: semantic-decoration-on-includes

> Face for includes that are not in some other state, in the `semantic-decoration-on-includes` decoration style.

— Face: semantic-decoration-on-unknown-includes

> Face for includes that cannot be found, in the `semantic-decoration-on-includes` decoration style.

— Face: semantic-decoration-on-unparsed-includes

> Face for includes that have not yet been parsed, in the `semantic-decoration-on-includes` decoration style.

#### 2.10.1 Creating New Decoration Modes

You can create new types of decorations using the following function:

— Function: define-semantic-decoration-style name doc &rest flags

> Define a new decoration style with name. doc is a documentation string describing the decoration style name. It is appended to auto-generated doc strings. An Optional list of flags can also be specified. Flags are: `:enabled` <value> - specify the default enabled value for name.

> This defines two new overload functions respectively called `NAME-p` and `NAME-highlight`, for which you must provide a default implementation in respectively the functions `NAME-p-default` and `NAME-highlight-default`. Those functions are passed a tag. `NAME-p` must return non-`nil` to indicate that the tag should be decorated by `NAME-highlight`.

> To put primary decorations on a tag `NAME-highlight`, use functions like semantic-set-tag-face, semantic-set-tag-intangible, etc., found in the semantic-decorate library.

> To add other kind of decorations on a tag, `NAME-highlight` must use semantic-decorate-tag, and other functions of the semantic decoration api found in this library.