This plugin is a toolbox for working with completed tasks in your markdown files. It brings some of org-mode's features to Obsidian.
If you noticed a bug or thought of some way to improve the plugin, feel free to create an issue: https://github.com/ivan-lednev/obsidian-task-archiver/issues.
Pull-requests are also welcome! If you want to contribute but don't know where to start, you can create an issue or write me an email: [email protected].
You can also support me by buying me a coffee:
Archive tasks in this file
Here is what it looks like:
- [ ] This one I haven't done yet
- [x] Water the dog
- Some task details
- [x] Feed the plants
Turns into:
- [ ] This one I haven't done yet
# Archived
- [x] Water the dog
- Some task details
- [x] Feed the plants
Or, with date tree enabled:
- [ ] This one I haven't done yet
# Archived
- [[2021-09-W-38]]
- [[2021-09-16]]
- [x] Water the dog
- Some task details
- [x] Feed the plants
Archive tasks including nested tasks in this file
Same as simple archiving, except that now completed nested tasks also get archived, with their sub-items.
This:
- [ ] Incomplete task
- [x] Completed subtask
- Task details
- [ ] Incomplete subtask
Turns into:
- [ ] Incomplete task
- [ ] Incomplete subtask
# Archived
- [x] Completed subtask
- Task details
Delete tasks in this file
This one is the same as 'Archive tasks in this file', except that the tasks get discarded.
Archive heading under cursor
Grab the whole section under the heading under cursor, including all the child sections and move it to the archive.
This:
Some top-level text
# H1 heading
Some text
## H2 heading
More text
Turns into:
Some top-level text
# Archived
## H1 heading
Some text
### H2 heading
More text
Sort tasks in list under cursor
Grab the whole list under cursor and recursively reorder all the items based on completeness:
- Plain list items first
- Then, incomplete tasks
- And finally, completed tasks
This list:
- [x] Task
- Item
- [ ] Incomplete
- [x] Task
- Item More notes
- [ ] Incomplete
- Item 2
- [ ] Incomplete 2
- [x] Task
- Item
- [x] Task 2
Turns into:
- Item
- Item 2
- [ ] Incomplete
- Item More notes
- [ ] Incomplete
- [x] Task
- [ ] Incomplete 2
- Item
- [x] Task
- [x] Task 2
- [x] Task
Turn list items at this level into headings
Grab the list under cursor and turn every list item at and above the level of the item under cursor into a heading.
This:
- li 1
- li 2 | <- cursor
- li 3
Turns into:
# li 1
## li 2
- li 3
Toggle task under cursor done and archive it
When the cursor is on a task, this command completes the task and archives it at once.
There are a lot of settings to help you build a suitable workflow.
You can use several placeholders throughout the settings to build cool workflows. Those get resolved to different values when you run the archiver:
{{date}}
- Points to today
{{obsidianTasksCompletedDate}}
- Points to the completed date on the task (✅ 2023-03-29). This way you can archive tasks created with the
obsidian-tasks
plugin where they belong
- Points to the completed date on the task (✅ 2023-03-29). This way you can archive tasks created with the
{{sourceFileName}}
- Resolves to the base name of the file you're in
{{sourceFilePath}}
- Resolves to the path from the root of the vault to the file you're in
{{heading}}
- Points to the heading above the task
{{headingChain}}
)- Creates a chain from headings above the task. E.g.
Project 1 > Team 2
- Creates a chain from headings above the task. E.g.
You can send tasks to the same file or to a separate file, say, to a daily note, or to some path based on the name of the file you're in.
A regular expression for replacing the contents of the task during archiving; this is useful if you want to strip tags from archived tasks.
This might be useful if you want to see what you accomplished in a day:
This way you can archive only those tasks that match a pattern and leave the rest of them alone. Say, you only want to archive tasks with a global filter used by the obsidian-tasks
plugin (like the tag #task
).
You can create arbitrary hierarchies with placeholders both with headings and with list items. New archived tasks are going to be merged into existing trees.
You can use this feature to create a date tree in your archive:
Or you can create a single archive file with links to sources in headings:
Rules allow you to customize how you treat tasks that match certain conditions:
Potentially rules can specify any custom workflow for any set of tasks that match certain conditions. If you'd like to see some additional features here, feel free to create a feature request!
Open the command palette and run one of the archiver commands.
This plugin is an implementation of some features of org-mode for Emacs.
Also, I relied on the code from these excellent plugins:
- obsidian-kanban
- obsidian-outliner. This plugin is a beauty in terms of architecture and code quality
- obsidian-commander. Helped me figure out how to use a reactive framework to build a settings page
- Richard Cook ([email protected])
- Solid.js is used for the settings page.