Timeline
Stability: experimental (org-extensions-stability)
A text-mode Gantt chart: one row per task with a SCHEDULED or DEADLINE date, on a date axis.
require("org").setup({ extensions = { timeline = { zoom = "week" } } })
:Org timeline [agenda|buffer|subtree|<file>] [day|week|month] [filter], or the actions timeline_open (<prefix>Vt) and timeline_buffer.
A task's bar runs from its scheduled day to its deadline. With only one of the two, the bar is as many days long as its Effort takes at hours_per_day (8) working hours a day, starting on the scheduled day or ending on the deadline. The deadline is drawn as ◆. A task past its deadline is drawn in the error colour with a dashed trail up to today. Today's column is shaded and its date highlighted on the axis; at day zoom weekends are shaded too. With clocks (or c), the days a task was clocked show as ▒. DONE tasks are left out unless show_done is set.
Times of day count at day zoom, where a day's three columns are its thirds (0-8, 8-16, 16-24 h): SCHEDULED: <... 14:00-15:00> fills the middle one, a bar starting at 14:00 starts there, and a deadline at 20:00 puts its ◆ in the last one. A timed task with an Effort shorter than the rest of its day ends when the Effort does. The week and month zooms show whole days.
A repeating task (+1w, ++1m, .+2d on its SCHEDULED or DEADLINE) is drawn again at each later occurrence inside the view, in OrgTimelineRepeat: the whole bar and its deadline, shifted by the repeat. Only occurrences from the current date on are drawn: the past of a repeating task is its log, not its timestamp.
With the org-extensions-ics extension on and the agenda files as the source, calendar events get a row each (a span per occurrence, in OrgTimelineEvent), placed by their times like timed tasks; ics = false leaves them out. They can't be opened or rescheduled from here.
In a narrow window the task names take at most 40% of the width.
Keys
+ = / - zoom in / out: day (3 columns a day), week (a column a day),
month (a column a week)
[ / ] pan half a screen to the past / future
. back to today
<CR> open the task
S / D reschedule / set the deadline of the task with the date prompt
(as C-c C-s / C-c C-d)
c show or hide clocked days
r refresh
<Esc> q quit
Options (defaults)
source,query,tag"agenda", nil, nilshow_donefalsezoom"day"days_before3 (days before today at the left edge)label_width34hours_per_day8clocksfalseicstrue (calendar events, with the ics extension)layout"float" (as for the kanban board)width,height0.94, 0.88savenil (save after S / D; nil followsagenda.save_after_edit)keyszoom_in,zoom_out,pan_left,pan_right,today,jump,schedule,deadline,clocks,refresh,quit
Highlight groups: OrgTimelineTitle, OrgTimelineHint, OrgTimelineAxis, OrgTimelineMonth, OrgTimelineSeparator, OrgTimelineBar, OrgTimelineDone, OrgTimelineOverdue, OrgTimelineDeadline, OrgTimelineClock, OrgTimelineToday, OrgTimelineTodayLabel, OrgTimelineWeekend, OrgTimelineTask, OrgTimelineRepeat, OrgTimelineEvent.
Panning and zooming redraw without reading the files again; the timeline is rebuilt when one of its files is written or changed (in Normal mode), as the kanban board is.