Releases: gabrielzschmitz/Tomato.C
Release list
v1.0.3
Tomato.C v1.0.3
Patch release fixing session duration calculations to include short and long
breaks, deduplicating history log records for accurate statistics, and adding
comprehensive unit tests for edge-case handling of the history subsystem.
What's fixed/changed
- Accurate session duration —
HistSessionsForDayandGetPomodoroHistoryDay
now compute duration via the pomodoro formula (cycles × work + (cycles−1) × short + long) instead of relying oncurrent_step_timeortotal_elapsed.
This gives the correct planned session length including all breaks,
regardless of how the session ended - History overview matching per-day display —
createPomodoroHistoryStats
(used bytomato -h) now counts total session time including pauses instead
of work-only minutes, making the overview consistent with the per-day
breakdown - TUI history statistics no longer overcounts — the statistics dialog
(CreateHistoryStatsDialog) deduplicates log records bysession_indexand
uses the formula for focus time instead of summingcurrent_step_time / 60
across every per-minute record, which was inflating session count and focus
minutes by 145× per session - Day history dialog shows real end time — end times are now read from
session_start_time + total_elapsed(the actual wall-clock end of the
session), not derived fromstart_time + formula_duration. Skipped sessions
correctly display their real (instantaneous) end time - Session row numbering is now per-day sequential — history dialogs and
tomato -h todaynumber sessions 1, 2, 3… per day instead of showing the global
session_index, which could start at arbitrary numbers like#8 - Thread-safe time functions —
localtime_rreplaces non-reentrantlocaltime
in all history display functions - Session count in
-h today— fixed a bug where sessions existed but the
output incorrectly showed "No pomodoro history found." - 8 new unit tests for
HistSessionsForDay— covering skipped sessions
(endTime == startTime), multi-record deduplication, formula-based duration,
end-time fromtotal_elapsed, uncompleted sessions (duration 0), same-day
multiple sessions, and day filtering
Full changelog: CHANGELOG.md
To update, rebuild from source with ./build.sh --install. See the
README for details.
v1.0.2
Tomato.C v1.0.2
Patch release adding default static frame support for sprite
animations, pre-loading all three icon sets at startup for instant
switching, and fixing rendering of notes and page transitions when
animations are disabled.
What's fixed/changed
- Default static frame support — Rollfilm now has a
default_framefield parsed from an optional/Dfsuffix on
sprite header lines. When animations are not active (e.g.
!ANIMATIONS), the renderer seeks to this frame for a stable
static display instead of cycling through all frames - Multi-format icon switching — All three icon types (nerd-icons,
emojis, ascii) are parsed at initialization into a 2D array
icon_animations[MAX_ICON_TYPES][MAX_ANIMATIONS], with
app->animationsas a pointer to the active set. This
eliminates file I/O at switch time and makes icon changes update
the display immediately via LEFT/RIGHT/SPACE in the preferences
menu, not just after closing the select sub-dialog - Default static frame indices defined for all scenes — every
.ascsprite file across all scenes (continue, help, longpause,
mainmenu, notes, notes_transition, shortpause, worktime) and all
three icon types now specifies a default frame via/Dffor
consistent non-animated presentation - Notes rendering with
!ANIMATIONS— the notes scene no longer
skipsrenderNotesScenein the non-animated code path; the page
indicator and animation panel now render correctly without
animations enabled - Page transitions with
!ANIMATIONS—UpdateNotesnow
completes transition state (clearingtransitioning, applying
the target page) even when animations are disabled, preventing
the page advancement from getting stuck
Full changelog: CHANGELOG.md
To update, rebuild from source with ./build.sh --install. See the
README for details.
v1.0.1
Tomato.C v1.0.1
Patch release fixing the ErrorCode 8 crash when running outside the project
directory and introducing $DATADIR token expansion for portable TOML
configuration files.
What's fixed/changed
- Fix use-after-free in config loading — notification audio_path and noise
sound_path values read from TOML config files were stored as dangling
pointers after toml_free() invalidated the parser's string table, causing
InitApp() to read corrupted memory and fail with ErrorCode 8 when running
outside the project directory - $DATADIR token expansion — TOML config values for audio_path, sound_path, and
logging paths now support the $DATADIR token, resolved at load time to the
compile-time DATADIR path, making config files portable across installation
prefixes and working directories - Updated sample_config.toml — all hardcoded audio_path and sound_path values
replaced with $DATADIR/sounds/... tokens to prevent path breakage
Full changelog: CHANGELOG.md
To update, rebuild from source with sudo ./build.sh --install. See the
README for details.
v1.0.0
Tomato.C v1.0.0
Initial release of Tomato.C, a terminal-based Pomodoro timer with a built-in notes editor, white noise player, and session history tracker.
What's included
- Pomodoro timer - work/break cycles with configurable durations and 1–8 pomodoros per session, pause/resume/skip, auto-start prompts, and unfinished-session detection
- Notes/task editor - Vim-like modal editing (NORMAL/INSERT/VISUAL), hierarchical notes with configurable nesting, pagination with animated transitions, undo/redo
- Status bar - 11 modules (InputMode, RealTime, Scene, CurrentStatus, LineColumn, Progress, Streak, Date, Weekday, TerminalSize, Icons) configurable by position and icon set
- White noise - Rain, Fire, Wind, Thunder tracks with per-track and master volume
- Desktop notifications - libnotify (Linux) and sound alerts per stage
- Session history - binary log, contribution graph, streak tracking, day-by-day detail, and IPC status via Unix socket (
tomato -t) - Configuration - TOML-based (system + user), fully customizable keybindings per mode and scene, runtime preferences dialog, 3 icon sets (Nerd Fonts, Emojis, ASCII)
- Build - POSIX make, Linux and macOS (Intel + ARM), CI via GitHub Actions
- Testing - 10 unit suites + 5 integration suites
Full changelog: CHANGELOG.md
To install, build from source with the provided build.sh script. See the README for details.