Add paid pomodoro breaks

Some jobs pay for breaks, so a pomodoro break shouldn't take time off
the workday. By default (new setting `paid_breaks`, in [reminders]), b
on the Tracker, zb anywhere or :break starts a pomodoro break WITHOUT
pausing the shift: the break stays in your worked time and the data
file isn't touched. b (or s) brings you back to focus. With the setting
off, b pauses the shift like p. p and e always stop the clock.

For the rhythm, a paid break still counts as a break: reminders::PaidBreaks
keeps them in memory and pomodoro() cuts them out of the focus stretches,
the same way as a pause. Stopping the shift ends a paid break, and
closing the work day forgets them.

The Tracker shows "on a paid break" and the paid break's progress, and
the nudges name the right key (b or p/s).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
skkeyeandClaude Opus 5.5 committed 2026-09-25 00:06:26 -04:00
1 parent fe5e2d9a7f
commit 49e14b820a
8 files changed
+233 -21

No files matched your search

+2
View File
@@ -35,6 +35,7 @@ pub const COMMANDS: &[(&str, &str)] = &[
(":set name :set noname", "turn an on/off setting on or off (name! flips it)"),
(":undo :redo", "undo / redo"),
(":snooze", "snooze the break reminder"),
(":break", "take a pomodoro break / back from it"),
(":tracker :days :insights :settings", "go to a screen"),
(":help", "all keys"),
(":q", "quit"),
@@ -125,6 +126,7 @@ pub fn parse(text: &str, ctx: &Context) -> Result<Action, String> {
"undo" | "u" => Ok(Action::Undo),
"redo" => Ok(Action::Redo),
"snooze" => Ok(Action::Snooze),
"break" => Ok(Action::TakeBreak),
"tracker" => Ok(Action::GoTo(Tab::Tracker)),
"days" => Ok(Action::GoTo(Tab::Days)),
"insights" => Ok(Action::GoTo(Tab::Insights)),