Skip to content

Any Checkbox

The mdfu tasks browser lists every markdown checkbox in scope, not only mdtask-formatted tasks. This page documents what qualifies, what you can do with an item, and how the browser stays out of the way of the strict mdfu task commands.

A line is shown as a checkbox item when it has all of:

PartAccepted
IndentationAny run of spaces or tabs (nested items are included).
Bullet-, *, or +.
Checkbox[ ] (open), [x] (done), or [X] (done, uppercase).
SeparatorA single space after the closing bracket.
TextAny remainder: a plain title, or an mdtask ID, metadata, and body.
- [ ] plain item with no ID
* [x] indented sub-item
+ [X] another bullet and an uppercase X
- [ ] PRJ-42 an mdtask-identified task #launch

All four appear in the list. An item may carry an mdtask ID, metadata tokens (#tag, !priority, @key:value), and an indented body, exactly as the mdtask format describes — but none of that is required.

The browser deliberately does not treat these as items:

  • lines inside a fenced code block (``` or ~~~), which are masked exactly as they are for the CLI;
  • block quotes (> - [ ] …); and
  • ordered-list items (1. [ ] …).

Plain, non-checkbox list items are never shown.

Every recognised item supports the full set of browser actions, whether or not it has an ID:

KeyActionBehaviour on a non-mdtask item
xToggle doneFlips [ ] ↔ [x], preserving the original bullet and indentation. An uppercase [X] flips to [ ].
tEdit title/metadataSeeds the raw line; the bullet, indent, and checkbox are preserved unless you change them.
eEdit bodyRe-indents by the item’s existing body indent (default two spaces).
oOpen in $EDITORJumps to the item’s line.
mMove to fileMoves the item’s whole block to the target file.
aArchiveArchives only a done item; an open item writes nothing.
nNew itemSeeds - [ ] ; saved to the --path file or the focused item’s file.

The selection flags (--all, --blocked, --sort, --tag, --priority) are unchanged; see the Tasks TUI page for the full keymap and pane layout.

An item without an ID is identified by its file and line, which stays correct even when two lines have identical text. An item with an ID keeps that ID as its identity, so the cursor follows it across a move.

A nested checkbox is its own item and ends its parent’s block. A sub-item’s text is therefore never absorbed into the parent’s body:

- [ ] parent ← item; body is "parent note"
parent note
- [ ] child ← separate item; body is "child note"
child note

Moving or archiving a parent moves or archives only that parent; the nested items stay where they are and can be handled individually.

This breadth is a browser-only behaviour. The non-interactive mdfu task … subcommands keep the strict mdtask grammar exactly, so their output remains byte-compatible with the specification. In particular:

  • mdfu task list, view, open, move, set, archive, and validate see only mdtask-formatted tasks;
  • when stdout is not a terminal, mdfu tasks falls back to mdfu task list, so a piped mdfu tasks is byte-identical to the CLI and does not show arbitrary checkboxes.

To promote ID-less items into first-class tasks, run mdfu task ids to assign IDs.

See also: Tasks for the strict format and commands, and Tasks TUI for the browser’s layout and keybindings.