13 - Task Notes
Goals
Create a special note type for tasks.
Context
Task management is a popular use case with Dendron. Many users currently use scratch note (Private) for tasks.
While it can work, tasks have a lot of additional considerations like priority, ownership and due date that are hard to track in a consistent way using simple scratch notes.
A common pattern for task is using the [ ]
syntax to track completion
- [ ] todo1
This works less well once the task becomes a scratch note that is present in multiple places
<!-- weekly.journal.2021.01 --->
- [ ] [[todo1|scratch.journal.2021.01.01.todo1]]
...
<!-- daily.journal.2021.01.01 --->
- [ ] [[todo1|scratch.journal.2021.01.01.todo1]]
...
As a user, I now have to remember to check this task off in multiple places.
Proposal
To address previously mentioned issues, we introduce the concept of a Task Note. This is a new special note (Private) that is meant to make it easier to manage tasks in Dendron.
This RFC aims to implement the following functionality:
- specify how to create and customize task notes
- specify how to change the status of task notes
- specify how to display task notes
- specify how to create different views for task notes
Details
Creating a task note
Task notes will be added to Dendron as a lookup modifier (Private) with the following default shortcuts:
CMD+SHIFT+T
(mac)CTRL+SHIFT+T
(windows and linux)- NOTE: this conflicts with the built in shortcut to reopen a closed window
By default, task notes will be created as a child of the current note. For example, if the current note was proj.build-a-cabin
, creating a task note would result in proj.buid-a-cabin.task.{desc}
being created where {desc}
is the human readable description of said note.
Customizing a task note
Task notes have the same configuration as Dendron's other special notes (Private).
notes.owner.hierarchy
- default:
people
The hierarchy for task owners.
Properties
A task note has the following optional properties that can be set in the frontmatter
completed: boolean
due: date
owner: string
priority: L|M|H
tags: [tag1, tag2]
status: wip
completed
Indicates whether the project is complete
due
Date indicating when the task is due
owner
The individual responsible for the task
priority
The priority of the given task
status
The current status of the task. This should be customizable. The default list can be a simplified version of what we have in the handbook
tags
Tags for the given task
Log
Every time the status changes, it is updated in the log
Display
When a task is completed, Dendron will create the following rendering
<!-- raw markdown -->
- [[proj.build-a-cabin]]
<!-- rendered markdown in editor and preview-->
- [x] [[proj.build-a-cabin]]
Note that in the editor, the [x]
will be rendered as a Text Decorator which means it won't be part of the document but only appear as a visual indicator.
Using the same technique, Dendron can show the rest of the task properties using the text decorator trick.
completed: false
status: a
due: friday
owner: kevin
priority: H
tags: [backend]
- [ ] [[proj.build-a-cabin]] due:friday @kevin prio:H #backend
How a text note link is rendered can be configured using notes.task.render (Private) property.
Configuration
notes.task.render
- default: `- [{note.completed}][{note.fname}] {% if due %} {% endif %}
{% if posts.length %} {% else %} No project posts yet! {% endif %}
Example
- Jonny is in his daily journal,
user.jonny.journal.2021.10.08
## Tasks - buy milk
- Jonny runs
Dendron: Create Task
when highlightingbuy milk
- this runs
lookup
with the newtodo
modifier checked - creates and opens
user.jonny.journal.2021.10.08.todo
while creating a wikilink in the original daily journal--- title: buy milk completed: false due: null owner: jonny status: a priority: M tags: [] ---
- this runs
- TBD
Tradeoffs
Discussion
Please see the discussions page to add any thoughts or suggestions.
PRs
- From Kevin Pr CommentsGo to text →
Summary
2021.10.27
- Can we have links to docs for this?
- If I type a character and then paste the link to a task note, it looks like that character is merged with the generated doc? https://www.loom.com/share/75751a0b7efd4d09ba59c7888b63fa2c
- Can we also create an explicit command to make this easier to discover? (
eg. Dendron: Task Create
)? When the user chooses this option, it should bring up lookup withselection2link
andtask note
modifiers activated - For status, can we default to show the one letter abbreviation with a
[ ]
around it? its visually easier to parse. see examples below:- short abbreviation
- [x] [[task1]] - [a] [[task2]] - [b] [[task3]] - [.] [[task4]] - [y] [[task5]]
- current
- work in progress [[task1]] - done [[task2]] - blocked [[task3]] - done [[task4]] - blocked [[task5]]
- In a separate PR - since we are making lots of use of the frontmatter folding, can we switch this so that the default is to not fold?
response
I changed the default configuration so that the task notes are creates as the child of the current note. One thing I left different was leaving the default name
task
. There are a few options here, and I'm not sure which one to go with:1. Leave the default name `task`, and leave the timestamp off. This is the current setup, and leads to the default quickpick name of `current.task`. 2. Leave default name empty, and leave the timestamp off. This would lead to the default name being exactly the same as the note name. 3. Leave the default name empty, but set a timestamp. This would lead to the default name being `current.2021.10.27.123123`.
My concern is that the second option is very confusing, if the user selects "create task" then the quickpick value is identical with the current note name. If the user hits enter without typing anything, then nothing will happen since it opens the same note.
The reason why I went with the first option for now is that it at least allows the user to create a task note for the first time even if they immediately hit enter. This still can be confusing though, because we don't actually want the user to create a
current.task
note and we want them to typecurrent.something
.I am personally in favor of having the third as the option, because it will always create a task note without having to type anything. Perhaps an alternative could be to have an adaptive approach where it defaults to a timestamp if nothing is selected, and does selection2link if something is selected.
Note: I see the tests are failing because I missed updating a snapshot, I'll update it after some discussion on this PR as to what option to go with.
Can we have the 1st option but do
{current}.task.
? This implies that the user should add a task. I just realized that we don't stop the user from creating{current}.task.
as a note, we should also do a separate PR to prevent this from happening.
Children
Backlinks