Time Ruler combines the best parts of a nested tasklist and an event-based calendar view. Drag-and-drop tasks to time-block and reschedule, and view tasks on top of read-only online calendars. Integrates well with the Tasks, FullCalendar, Reminder, and Obsidian Day Planner plugins.
Time Ruler uses the Dataview plugin to read tasks, so please install it before you use this plugin.
Task metadata can be specified in any of the following formats:
YYYY-MM-DD hh:mm - hh:mm task content > yyyy-mm-dd [query:: <query>] ?/!/!!/!!!
>
: due date.hh - hh
for times.[scheduled:: yyyy-mm-ddThh:mm] [due:: yyyy-mm-dd] [duration:: #h#m] [priority:: lowest/low/medium/high/highest] [query:: <query>]
#h#m
examples: 1h
, 1h30m
, 1.5h
, etc. Any Dataview duration will work.[startTime:: hh:mm] [duration:: #h#m] [query:: <query>] ⏳ yyyy-mm-dd 📅 yyyy-mm-dd ⏬/🔽/🔼/⏫/🔺
[date:: yyyy-mm-dd] [startTime:: hh:mm] [endTime:: hh:mm] or [allDay:: true] [due:: yyyy-mm-dd] [priority:: lowest/low/medium/high/highest] [query:: <query>]
As of version 2.0, Time ruler includes queries, tasks whose children are taken from a Dataview search. Some example searches:
[query:: "Path/to/folder"]
(notice the double-quotes, which are used for Dataview folder sources. Use #
to designate a heading afterwards)[query:: "#heading"]
(headings begin with #, but are framed in double-quotes).[query:: #tag]
[query:: incoming([[link to note]]) WHERE scheduled and !due]
Time Ruler now reads Full Calendar note events as well as any page with completed: false
or completed: null
and the following optional Properties:
scheduled: date
due: date
priority: highest/high/medium/low/lowest
duration: #h#m
(a Dataview duration - see above)start: date
You can specify any of the Obsidian Reminder formats as well.
When editing a task via drag-and-drop, tasks are converted back to the formatting detected in the task. If this is not possible, the user's preferred format (Day Planner, Dataview, Tasks, or Full Calendar) is used. This can be changed in Settings.
Note: Double-spaces are used between brackets because without them, Obsidian thinks they are markdown links.
+
button (top left) onto a time. For unscheduled, simply click the +
button.->
button (top left).Unscheduled
button.Refresh
button (the circular arrow) in the toolbar.+
button onto a time. By default, you will create in today's Daily note, but you can pick a specific heading or file. ...
button (top-left) to view settings.+
and -
buttons. focus
button (outwards arrows) to expand the timer and focus on current tasks.dv.pages(<custom filter>)
. It only filters out certain pages, and can't filter specific tasks within those. Use Custom Statuses to filter out tasks. See this link for dv.pages()
and this link for how to format query sources.
"folder"
-"folder"
"folder" or "folder2" and -"folder3"
#tag or #tag2 and -#tag3
[[page]]
outgoing([[page]])
[ ]
in tasks).task-list-item
, task-list-item-checkbox
, task-due
, task-scheduled
, data-task
, and task-priority
coincide with Tasks plugin styling, and additional task-duration
and task-reminder
classes are added to those parts of tasks, so you can style them with CSS snippets (unfortunately, you will need to add your own custom status styling, due to custom themes being formatted for the Obsidian markdown editor, and not Time Ruler).time-ruler-heading
and time-ruler-block
classes let you style headings and blocks. time-ruler-container
is added to the plugin's container element.Upon calendar refresh, the plugin makes a single GET request to any calendars you are subscribed to, which downloads their events in .ics format.
For more information on past and future updates, please consult the roadmap and changelog.
If you appreciate this plugin, I would love your support for further development!