j-palindrome62k downloadsA drag-and-drop time ruler combining the best of a task list and a calendar view (integrates with Tasks, Full Calendar, and Dataview).
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: datedue: datepriority: highest/high/medium/low/lowestduration: #h#m (a Dataview duration - see above)start: dateYou 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.Custom Filter: This is passed to 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.
Note: do not include dv.pages() in the entry box—only the query string passed to the function.
"folder"-"folder""folder" or "folder2" and -"folder3"#tag or #tag2 and -#tag3[[page]]outgoing([[page]])Filter Function: Provides a filtering function that uses the data passed from dv.pages()['file']['tasks']
Custom Status: Either include only certain custom statuses, or exclude all specified custom statuses (characters between [ ] in tasks).
To style Time Ruler, the following classes are added:
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!