kenincan17 downloadsTurn individual list behaviors on or off, with or without Obsidian's Smart lists setting, including the nested-item changes from Obsidian 1.15.
An Obsidian plugin that lets you turn each list behavior handled by Smart lists (Settings → Editor → Smart lists) on or off individually. The plugin follows its own settings whether Smart lists itself is on or off.
In Obsidian 1.15, when Smart lists is on, indenting, moving lines, and pressing Enter now carry nested child items along. This plugin lets you switch each of those behaviors on or off one by one. The defaults match the behavior of 1.14.
Every setting follows the same rule: on = the behavior happens.
| Section | Setting | Default | When on | When off |
|---|---|---|---|---|
| Indent | Indent nested items along | Off | Tab / Shift-Tab / Mod-] / Mod-[ and Indent list / Unindent list move child items too (1.15 default) | Indents only the current line (or the selected lines). No depth limit |
| Move line | Move nested items along | Off | Move line up/down moves a list item together with its child items | Only the current line (or the selected lines) moves |
| Move line | Skip blank lines | Off | Move line up/down jumps over blank lines and leaves them in place | Blank lines are swapped like any other line |
| Enter | Continue the list | On | Enter creates a new item with the same bullet, the next number, or an empty checkbox | A plain line break that only keeps the indentation (same as with Smart lists off) |
| Enter | Add as first nested item | Off | Enter at the end of an item with children adds the new item as its first child (1.15 default) | Adds a sibling item right below (1.14) |
| Enter | Add after folded items | On | Enter at the end of a folded item adds the new item after the folded range (1.15 default) | Adds it right below that line, inside the folded range (1.14) |
| Numbered lists | Renumber automatically | On | Editing a numbered list renumbers the items that follow | Keeps the numbers as you typed them |
>> / << in Vim mode, is not affected.This plugin is based on obsidian-sample-plugin. Building and development work the same way as in the sample plugin.
node --version).npm i to install dependencies.npm run dev to compile src/main.ts to main.js in watch mode.npm run build for a production build (includes type checking).npm run lint to run ESLint (eslint-plugin-obsidianmd).npm update to update the Obsidian API.Put the development folder at <Vault>/.obsidian/plugins/smart-list-tweaks/, reload Obsidian, and enable the plugin in Settings → Community plugins.
@codemirror/* is treated as external at build time, and Obsidian's own copy is used at runtime. For that reason, overrides in package.json pins @codemirror/state and @codemirror/view to the versions the obsidian package specifies.
src/
main.ts # Lifecycle, keymap and extension registration
settings.ts # Settings type, defaults, and settings tab
features/
indent.ts # Indent / unindent (line only, or with children)
enter.ts # Enter / Shift+Enter (continue, first child, folded items)
moveLine.ts # Move line (children and blank lines toggled separately)
renumber.ts # Automatic renumbering (reverting, and own renumbering with Smart lists off)
commands.ts # Replacing built-in commands
utils/
listSyntax.ts # Parsing list lines
listBlocks.ts # Finding the range of an item plus its children
obsidianInternals.ts # All private API access lives here
Copy main.js and manifest.json to <Vault>/.obsidian/plugins/smart-list-tweaks/. This plugin has no styles.css.
Follow the sample plugin's process.
minAppVersion in manifest.json if needed, then run npm version patch|minor|major. This updates manifest.json, package.json, and versions.json.v), and .github/workflows/release.yml creates a draft release with main.js and manifest.json attached.