Big update for doing: a lot of quality-of-life work since my last post, plus some genuinely useful time-reporting features.

If you want the full docs, start with the wiki.

Time Budgets

You can now set time budgets per tag and see how much you have left as you track work.

doing budget dev 100h
doing budget meetings 10h
doing budget
doing budget dev --remove

Totals output now shows remaining budget per tag and an overall “total budgets left” footer when budgets are configured. The byday export also includes budget info in daily and grand totals.

More Flexible Totals Grouping

Totals can now be grouped by tags or sections, and you can repeat grouping flags to control output order.

doing show --totals --by section --by tags
doing show --totals --by tags --by section

There are also aliases for section grouping (project, p), so this works too:

doing show --totals --by project

New Totals Formats, Including Averages

You can now pick the totals time format directly from the command line with --totals_format.

doing show --totals --totals_format hmclock
doing show --totals --totals_format natural

There is also a new averages mode that appends hours/minutes and average hours per day to the total line.

doing show --totals --totals_format averages

That gives you output in the spirit of:

Total tracked: 26:03 (26h 3 min, 8.12h/day)

You can set a default with the totals_format config key and still override it per command when needed.

Better Export Consistency

Totals grouping now carries through exports more consistently, including HTML, Markdown, JSON, Day One, template, and wiki outputs. JSON totals also gained budget-related fields (budget, remaining, remaining_formatted) for each tag, which makes downstream automation easier.

For details on output and display options, see wiki pages like Displaying Entries, Time Tracking, and Configuration.

Other Stuff

  • Ruby 4 compatibility improved by falling back to reline when readline is unavailable.
  • Dashed aliases now work for underscore flags and subcommands (--only-timed, --tag-sort, doing tag-dir, etc.).
  • Interactive finish handling was fixed for section filters that can resolve to multiple values.
  • Time range parsing and normalization got several fixes (done --from, noon/12pm edge cases, and reset formatting issues).
  • Non-interactive runs no longer reopen /dev/tty for defaults.
  • Human totals box formatting and table alignment were cleaned up.
  • A few config and test harness rough edges were fixed.

As usual, if you run into anything odd, open an issue or PR. This was a nice round of polish plus some features that should make time reporting much more useful day to day.