2025-03-08 12:39:07 +00:00
# Heading Decorator
## Introduction
This is a plugin for [Obsidian ](https://obsidian.md ).
2025-03-21 05:01:55 +00:00
Implement displaying specific content around headings based on their levels.
2025-03-10 15:51:26 +00:00
2025-04-22 12:15:57 +00:00
This plugin supports optional decoration for reading view, editing view (*Live Preview* and *Source mode* ), *[Outline](https://help.obsidian.md/plugins/outline)* and *[Headings in Explorer](https://github.com/patrickchiang/obsidian-headings-in-explorer)* plugin. This plugin does not modify any note content, only decorates the heading section based on the existing note content.
2025-03-10 15:51:26 +00:00
## Preview
2025-03-13 03:28:10 +00:00
In *Live Preview* :
2025-03-10 15:51:26 +00:00

2025-03-13 03:28:10 +00:00
The interaction between the decorator and the collapse button:

2025-03-10 15:51:26 +00:00
## Settings
2025-04-02 12:44:56 +00:00
### Metadata keyword
The key name that reads the enabled status from the [properties ](https://help.obsidian.md/Editing+and+formatting/Properties ). The default value is: `heading` . Usage reference: [Enabled status of notes ](#enabled-status-of-notes ).
2025-03-10 15:51:26 +00:00
### Enabled
2025-03-11 05:32:10 +00:00
The plugin supports configure heading decorator for each editor mode. You can control the effect range:
2025-03-10 15:51:26 +00:00
2025-04-02 12:44:56 +00:00
- **Enabled in reading view**: Allow to decorate the heading under the *Reading* view.
- **Enabled in live preview**: Allow to decorate the heading under the *Live Preview* .
- **Enabled in source mode**: Allow to decorate the heading under the *Source mode* .
- **Enabled in outline plugin**: Allow to decorate the heading under the *Outline* plugin.
2025-04-22 12:15:57 +00:00
- **Enabled in "Headings in Explorer" plugin**: Allow to decorate the heading under the *[Headings in Explorer](https://github.com/patrickchiang/obsidian-headings-in-explorer)* plugin.
2025-04-02 12:44:56 +00:00
In addition, you can enable the default status of each note within the *Manage* subpage. It mainly works together with [Enabled status of notes ](#enabled-status-of-notes ).
2025-03-10 15:51:26 +00:00
### Effect
Control the display effect of the decorator.
- **Ordered**: Toggle this setting to enable the decoration of headings as an [ordered ](#ordered ) or [unordered ](#unordered ) list.
- **Opacity**: Set the opacity of the heading decorator. The value is the form of percentage.
2025-03-21 04:44:14 +00:00
- **Position**: Set the position of the heading decorator. You can configure the content to appear before or after the heading.
2025-03-10 15:51:26 +00:00
2025-04-09 14:16:03 +00:00
Here are some examples of the differences between different positions:
2025-04-18 15:58:21 +00:00
| Before the heading | Before the heading (inside) | After the heading |
2025-04-19 12:29:56 +00:00
| :----------------: | :-------------------------: | :---------------: |
2025-04-18 15:58:21 +00:00
|  |  |  |
2025-04-09 14:16:03 +00:00
2025-03-10 15:51:26 +00:00
### Ordered
Similar to the effect displayed in the [Preview ](#preview ).
You can control the counter style type and delimiter. There are two special types of counter styles:
2025-04-22 12:15:57 +00:00
- **Custom list styles**: Set custom list styles for ordered list. Using spaces to separate entries.
2025-03-13 03:14:10 +00:00
- **Specified string**: Set a specified string for ordered list.
2025-03-10 15:51:26 +00:00
2025-03-13 03:14:10 +00:00
For example:
2025-03-10 15:51:26 +00:00
2025-03-13 03:14:10 +00:00
| Decimal numbers | Custom List Styles (using `Ⓐ Ⓑ Ⓒ` ) | Specified String (using `#` with empty delimiter) |
| :-------------: | :----------------------------------: | :-----------------------------------------------: |
|  |  |  |
2025-03-10 15:51:26 +00:00
2025-04-02 14:14:38 +00:00
#### Allow zero level
For the *Allow zero level* setting, if the next heading is more than one level higher, the omitted level is zero instead of one. For example:
| Default | Allow zero level |
| :-----: | :--------------: |
|  |  |
2025-03-27 13:43:02 +00:00
#### Based on the existing highest level
For the *Based on the existing highest level* setting, use the highest level of headings in the note as the base for ordered list. For example:
| Default | Based on the existing highest level |
| :-----: | :----------------------------------: |
|  |  |
#### Ignore the single heading at the top-level
For the *Ignore the single heading at the top-level* setting, if the top-level has only a single heading, exclude it when building an ordered list. This setting contains *Based on the existing highest level* , but it deals with more "aggressive". For example:
2025-03-10 15:51:26 +00:00
2025-03-13 03:14:10 +00:00
| Default | Ignore the single heading at the top-level |
| :-----: | :----------------------------------------: |
|  |  |
2025-03-10 15:51:26 +00:00
2025-04-02 14:05:24 +00:00
##### The maximum number of ignored
For enabled: Ignore the single heading at the top-level. The maximum number of ignored headings at the top-level. For example:
| Default | Ignore the single heading at the top-level with default value (`6`) | The maximum number of ignored is `1` |
| :-----: | :-----------------------------------------------------------------: | :----------------------------------: |
|  |  |  |
2025-03-10 15:51:26 +00:00
### Unordered
2025-03-13 03:14:10 +00:00
Directly decorate the heading according to the level. For example:
2025-03-10 15:51:26 +00:00
2025-03-13 03:14:10 +00:00
| Ordered (Decimal numbers) | Unordered (using `H1 H2 H3 H4 H5 H6` ) |
| :-----: | :--------------: |
|  |  |
2025-03-10 15:51:26 +00:00
2025-04-22 12:35:16 +00:00
### Blocklist
2025-04-03 14:36:04 +00:00
2025-04-22 12:35:16 +00:00
#### Folder blocklist
2025-04-03 14:36:04 +00:00
2025-04-22 12:35:16 +00:00
Disables the heading decorator in notes within the specified folder. For notes that are on the blocklist, you can still use [Enabled status of notes ](#enabled-status-of-notes ).
2025-04-03 14:36:04 +00:00
#### Note name regex blocklist
2025-04-22 12:35:16 +00:00
Disables the heading decorator in notes whose note name matches the specified regular expression. The format uses [JavaScript regular expression ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions ), for example: `/^daily.*/i` . For notes that are on the blocklist, you can still use [Enabled status of notes ](#enabled-status-of-notes ).
2025-04-03 14:36:04 +00:00
2025-04-02 12:44:56 +00:00
## Enabled status of notes
This plugin allows for configure the enabled status based on specific fields in the note [properties ](https://help.obsidian.md/Editing+and+formatting/Properties ). You can individually control the enabled status of a note.
2025-04-22 12:15:57 +00:00
You can specify the status after the configured property [keyword ](#metadata-keyword ):
2025-04-02 12:44:56 +00:00
```yaml
---
2025-04-22 12:15:57 +00:00
heading: false
2025-04-02 12:44:56 +00:00
---
```
2025-04-22 12:15:57 +00:00
The values `true` , `yes` , `on` or `1` indicates enabled; the values `false` , `no` , `off` or `0` indicates disabled. Other values are equivalent to undeclared.
2025-04-02 12:44:56 +00:00
2025-04-22 12:15:57 +00:00
You can also use the following subfields to specify the status of a specific mode:
2025-04-02 12:44:56 +00:00
2025-04-22 12:15:57 +00:00
- **reading**: the status of the decorator in the reading view.
- **preview**: the status of the decorator in the live preview.
- **source**: the status of the decorator in the source mode.
- **outline**: the status of the decorator in the outline plugin.
- **file-explorer**: the status of the decorator in the "Headings in Explorer" plugin.
- **all**: the status of the decorator in all modes.
For example, you can set all other modes to be disabled and enable the decorator in the reading view alone:
2025-04-02 12:44:56 +00:00
```yaml
---
2025-04-22 12:15:57 +00:00
heading:
all: false
reading: true
2025-04-02 12:44:56 +00:00
---
```
2025-04-22 12:15:57 +00:00
If you prefer to use Obsidian's default property `cssclasses` , you can also fill in `cssclasses` with some equivalent class names:
2025-04-02 12:44:56 +00:00
- reading: `enable-reading-heading` /`disable-reading-heading`
- preview: `enable-preview-heading` /`disable-preview-heading`
- source: `enable-source-heading` /`disable-source-heading`
- outline: `enable-outline-heading` /`disable-outline-heading`
2025-04-22 12:15:57 +00:00
- file-explorer: `enable-file-explorer-heading` /`disable-file-explorer-heading`
2025-04-02 12:44:56 +00:00
- all: `enable-heading` /`disable-heading`
2025-04-22 13:28:49 +00:00
For example, a value equivalent to the above example:
2025-04-02 12:44:56 +00:00
```yaml
---
2025-04-22 13:28:49 +00:00
cssclasses: disable-heading enable-reading-heading
2025-04-02 12:44:56 +00:00
---
```
2025-04-19 13:03:48 +00:00
## Custom decorator styles
2025-04-18 15:58:21 +00:00
You can customize the heading decorator style by CSS classes. For decorators in the editor, `.custom-heading-decorator` can be used. Or for specific editor modes:
2025-04-22 12:15:57 +00:00
- Reading view: `.reading-custom-heading-decorator` .
- Live Preview: `.preview-custom-heading-decorator` .
- Source mode: `.source-custom-heading-decorator` .
For decorators in other plugins, it is necessary to combine pseudo-element keywords:
2025-04-18 15:58:21 +00:00
2025-04-22 12:15:57 +00:00
- Outline: `.outline-custom-heading-decorator::before` or `.outline-custom-heading-decorator::after` .
- Headings in Explorer: `.file-explorer-custom-heading-decorator::before` or `.file-explorer-custom-heading-decorator::after` .
2025-04-18 15:58:21 +00:00
For example, make all the decorators display in green:
```css
.custom-heading-decorator,
.outline-custom-heading-decorator::before,
2025-04-22 12:15:57 +00:00
.outline-custom-heading-decorator::after,
.file-explorer-custom-heading-decorator::before,
.file-explorer-custom-heading-decorator::after {
2025-04-18 15:58:21 +00:00
color: green;
}
```
2025-03-10 15:51:26 +00:00
## Credits
- [@jsamr/counter-style ](https://github.com/jsamr/react-native-li/tree/master/packages/counter-style#readme )
## License
[MIT ](/LICENSE ) license