org.nvim

Views: kanban, timeline, heatmap, sidebar

Four visual views of your tasks, each an extension of its own. They share their plumbing (lua/org/extensions/views_util.lua): where entries come from, filters, the window, jumping back to a heading and redrawing when org files are written or a TODO state or clock changes. Their global keys live under <prefix>V.

Where a view takes a source, it is one of:
  "agenda"   the agenda files (default)
  "buffer"   the current buffer
  "subtree"  the subtree at the cursor (followed while lines are added
             above it)
  a path or glob, or a list of them

A filter (/ in the kanban board, or words after :Org kanban) is an org-ql sexp when it starts with ( (org-extensions-ql; the query language is loaded on demand, the ql extension need not be enabled), and a tags / property match like work+urgent-home otherwise (org-match-syntax). The query option takes any org-ql query, plain syntax included.

COMMENT and ARCHIVE subtrees are left out, as in the agenda. The views are scratch buffers; <CR> opens the heading in the window the view was opened from (floats and tabs close first), and <Esc> or q closes them. A key in a list of alternatives, like q in the default quit = { "<Esc>", "q" }, gives way to any other key that uses it, so setting refresh = "q" keeps q for refreshing. :Org kanban, :Org timeline and :Org heatmap complete their arguments: the sources, org files, zooms or kinds, and the tags of the agenda files. A word is a file when it ends in .org, starts with ~, . or /, has a glob character or names an existing path; anything else is a filter, so work/NEXT is a tags/TODO match.

The views redraw after an org buffer they show is changed (once after a burst of changes) or written, and after TODO state, clock, property, capture and note events. A redraw reads nothing again while the files' parses (org.files keeps one per buffer text and file mtime) and the day are the same, and moving around in a view (selection, pan, zoom) only redraws it.