Kanban board
Stability: stable (org-extensions-stability)
A board with a column per TODO keyword and a card per heading:
require("org").setup({ extensions = { kanban = {
columns = {
"TODO",
{ "NEXT", "WAITING", name = "Doing", wip = 3 },
"DONE",
},
} } })
:Org kanban [agenda|buffer|subtree|<file>] [filter] opens it; the actions kanban_open (<prefix>Vk), kanban_buffer and kanban_subtree open it on the source option, the current buffer and the subtree at the cursor.
Columns are the TODO keywords in the order they are defined (with the keywords of #+TODO lines in the source files after them) unless columns lists them; a column can gather several keywords under a name. The header shows the number of cards, or count/limit with a WIP limit (wip in the column or the wip option), in the error colour with a ! once over it. Headers use the TODO keyword faces (ui.todo_keyword_faces).
A card shows the priority, the title (wrapped to title_lines), the deadline countdown (◆ in 3d, in the warning colour within the deadline's warning period, the error colour when overdue), the Effort (◷ 2:30) and the tags; card turns each part on or off (scheduled and category are off by default). Cards are sorted by sort.
Keys in the board
h / l move the card to the previous / next column: the heading gets
the column's first keyword through the regular TODO code, so
logging, CLOSED, blocking and repeaters work as with C-c C-t.
Columns whose keywords the card's file doesn't have (another
#+TODO sequence) are skipped. With choose_keyword, a column
of several keywords asks which one.
j / k next / previous card
J / K move the card after the next / before the previous card of the
column: its subtree moves past the other one in the file. Only
for cards under the same heading, with sort = "file" (in the
other orders the board would put it back)
H / L previous / next column
<CR> open the heading
/ filter (empty clears it)
r refresh
<Esc> q quit
The cursor can also be moved onto a card with any motion or the mouse. The board redraws itself when an org file is written, when one of its files is changed (in Normal mode; a burst of changes redraws once), and when a TODO state or clock changes; a board in a hidden tab waits until it is shown. Moving the selection redraws nothing. A board of thousands of cards takes a noticeable moment to build (about 0.2 s for 5,000 cards). Moved cards are saved with save = true (default: agenda.save_after_edit).
Options (defaults)
columns{} (one per keyword)choose_keywordfalsewip{} (limits by column name or keyword)show_donetruesource"agenda"query,tagnilsort"priority" | "deadline" | "scheduled" | "file"layout"float" | "tab" | "split" | "vsplit" | "current"width,height0.94, 0.88 (of the editor, or columns / lines)min_column_width22max_column_width44title_lines2card{ priority, tags, deadline, effort = true, scheduled, category = false }savenilkeysthe keys above, by name:prev_state,next_state,down,up,move_down,move_up,prev_column,next_column,jump,refresh,filter,quit
Highlight groups: OrgKanbanTitle, OrgKanbanHint, OrgKanbanBorder, OrgKanbanSelected, OrgKanbanCardTitle, OrgKanbanDoneTitle, OrgKanbanCount, OrgKanbanWipExceeded, OrgKanbanOverdue, OrgKanbanDueSoon, OrgKanbanDue, OrgKanbanScheduled, OrgKanbanEffort, OrgKanbanCategory, OrgKanbanEmpty.