                          ━━━━━━━━━━━━━━━━━━━
                           CHANGE LOG OF TMR
                          ━━━━━━━━━━━━━━━━━━━


This document contains the release notes for each tagged commit on the
project's main git repository: <https://github.com/protesilaos/tmr>.

The newest release is at the top.  For further details, please consult
the manual: <https://protesilaos.com/emacs/tmr>.

Table of Contents
─────────────────

Version 1.4.0 on 2026-07-31


Version 1.4.0 on 2026-07-31
═══════════════════════════

  TMR is an efficient package that has been stable for years. This new
  version introduces some nice new features as well as several smaller
  internal refinements.


Create a timer that repeats
───────────────────────────

  The command `tmr-repeat' prompts for a duration, like the standard
  `tmr' command but also asks for a number of times to repeat the given
  timer. When called with a prefix argument (`C-u' with default
  keybindings), `tmr-repeat' will also ask for a description for the new
  timer and whether it should be acknowledged or not after all
  repetitions have elapsed.

  Thanks to Óscar Fuentes for contributing the original implementation
  of `tmr-repeat' (with many extra changes/features by me). This was
  done in pull request 16: <https://github.com/protesilaos/tmr/pull/16>.
  Óscar has assigned copyright to the Free Software Foundation.


Modify the repeat count of an existing timer
────────────────────────────────────────────

  The command `tmr-edit-repeat-count' prompts for an existing timer and
  updates its repeat count. If the repeat count is set to `0', then the
  timer is no longer considered repeatable.

  As with all commands that operate on existing timers,
  `tmr-edit-repeat-count' automatically applies to the timer at point
  when called from inside the tabulated list of timers (per
  `tmr-tabulated-view').

  Modifying a timer's repeat count does not start a new timer. It simply
  updates the relevant data. Use the command `tmr-clone' to start a new
  timer using the data of an existing timer.


The tabulated view has more columns and all of them can be adjusted
───────────────────────────────────────────────────────────────────

  The tabulated list of timers, which is typically produced by the
  command `tmr-tabulated-view', now has extra columns for the data that
  pertains to repeatable timers.

  Users who want to control which columns are displayed, and in what
  order, can modify the user option `tmr-tabulated-columns'. Its
  documentation covers the technicalities. The default value is to
  display all columns.


Completion metadata for the prompt that selects a timer
───────────────────────────────────────────────────────

  Advanced users can now modify all the `completion-metadata' associated
  with the prompt that reads/selects one among the existing timer
  objects (the function is `tmr-read-timer'). The relevant variable is
  `tmr-completion-metadata'. I am not providing this as a user option,
  because regular users will anyway not be able to do much with it as it
  involves custom functions.


Timers in the completion prompt are sorted by end time
──────────────────────────────────────────────────────

  The prompt for selecting a timer now sorts candidates by their end
  time. The closest end time appears at the top.

  This affects all commands that operate on a timer, such as
  `tmr-edit-repeat-count', `tmr-cancel', and more.

  In the past, there was no sorting whatsoever. Users who prefer that
  style can add the following to their configuration:

  ┌────
  │ (setq tmr-completion-metadata
  │       (list
  │        (cons 'category 'tmr-timer)
  │        (cons 'display-sort-function #'identity) ; THIS IS THE RELEVANT PART
  │        (cons 'annotation-function #'tmr-completion-annotate)))
  └────


Miscellaneous
─────────────

  • The manual is easier to read. I have rewritten it to group commands
  …  …
