| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
| |
Header version in chime.el and the Eask manifest both move from 0.6.0 to
0.7.0 for the v0.7.0 release.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
org-gcal writes `:STATUS: declined' on calendar entries the user has declined,
and chime was happily showing them in the tooltip, modeline, and notification
stream — which defeats the whole point of declining a meeting.
I added `chime-declined-events-predicate', mirroring the shape of
`chime-done-keywords-predicate', and put it on the default
`chime-predicate-blacklist'. The match is on the literal lowercase value
because that's what real org-gcal exports use; uppercase or other values pass
through. Users who want declined events back can pop the predicate off the
blacklist.
Tests cover all four STATUS values seen in real org-gcal data (accepted,
declined, needs-action, tentative), plus the no-property, empty-property,
todo-keyword-still-attached, gibberish-value, case-sensitivity, and
default-blacklist-membership cases.
|
| |
|
|
|
|
| |
Eask flagged `agenda`, `chime`, and `sound` as unknown finder keywords. The
Eask manifest already lists the canonical set (notification, alert, org,
org-agenda, calendar), so I trimmed the in-file header to match.
|
| |
|
|
|
|
|
| |
`make compile' flagged it. The variable was bound but never referenced
in the bundled-notification branch, so I dropped the `let' binding.
Whether the bundled notification should actually carry that title is
a separate concern, not this fix.
|
| |
|
|
|
|
| |
`make compile' flagged the summary line at 86 chars. I split it across
two lines, with the lookahead clause and the return-value sentence on
the lines after.
|
| |
|
|
|
|
|
|
| |
Edebug's defun parser rejects the `(-> seconds (pcase ...) ...)' form,
so undercover can't instrument chime.el and `make coverage' produces
nothing. The let-bound rewrite is equivalent and parses cleanly.
I left an inline note so the form doesn't get folded back later.
|
| |
|
|
|
|
|
|
|
|
| |
Before MELPA submission, tighten the public API surface. Single-dash chime-foo is the convention for user-facing commands and predicates that external code can bind. Anything that is not meant to be bound externally should use the double-dash chime--foo prefix so byte-compile warnings, docstrings, and MELPA package inspection all point in the same direction.
Twelve helpers in chime.el had single-dash names but no user-facing role. They are not mentioned in README, they carry no interactive declaration, and their docstrings do not promise a behavior contract. Rename them: chime-get-minutes-into-day, chime-get-hours-minutes-from-time, chime-set-hours-minutes-for-time, chime-current-time-matches-time-of-day-string, chime-current-time-is-day-wide-time, chime-day-wide-notifications, chime-display-as-day-wide-event, chime-event-has-any-day-wide-timestamp, chime-event-within-advance-notice-window, chime-event-has-any-passed-time, chime-event-is-today, chime-environment-regex.
The public API surface is now intentional. It covers chime-mode, chime-validate-configuration, chime-refresh-modeline, chime-done-keywords-predicate, and the chime-debug-* interactive commands in chime-debug.el.
Breaking change. No alias shims because there are no downstream users yet.
|
| |
|
|
|
|
|
|
| |
chime--group-events-by-day
The date-string computation mixed the today/tomorrow/weekday label selection in with the grouping loop and carried its own pre-decoded copies of NOW and TOMORROW through five let-bindings before it could decide which branch to take. Lift the selection into chime--day-label-for-event-time (event-time now tomorrow). The outer function becomes pure grouping, the label logic gets its own test target, and future label tweaks (localized strings, a "Yesterday" branch for overdue items) edit one helper.
The outer function drops from 36 to 15 lines. The redundant (when event-decoded) guard is replaced by (when event-time) because decode-time always returns a struct for valid time values.
|
| |
|
|
|
|
| |
chime--fetch-and-process inlined two near-identical 7-line failure-handling blocks inside the async callback. They differed only in the log prefix ("Async error" for errors surfaced by the async process, "Error processing events" for errors thrown by the callback). Lift the shared body into chime--record-async-failure (err prefix) so the sequence lives in one place, and lift the success path into chime--handle-async-success (callback events) so the callback lambda becomes pure dispatch.
The outer function drops from 44 lines to 22.
|
| |
|
|
|
|
|
|
| |
chime--update-modeline grew to mix orchestration with the modeline-string formation logic. Extract the formation block into its own helper so the orchestrator reads as pure orchestration: build upcoming, find soonest, render, force update.
The helper handles both branches. When a soonest event is in the modeline window, format and propertize via chime--propertize-modeline-string. Otherwise, when chime-modeline-no-events-text is set, propertize that with the appropriate tooltip and click handlers (mouse-1 always, mouse-3 only when there are upcoming events to jump to).
The orchestrator drops from 45 to 25 lines.
|
| |
|
|
| |
Defined and tested but never called from any production code.
|
| |
|
|
|
|
|
|
|
|
| |
When all-day event alert times trigger, multiple events (overdue tasks,
birthdays, holidays) previously fired individual notifications — one
sound and one popup each. With 8-10 events this was overwhelming.
Now multiple day-wide events are bundled into a single notification
with all messages joined by newlines. Single events still notify
normally without bundling.
|
| |
|
|
|
|
|
|
|
| |
Previously chime-modeline-string was nil until the first async check
completed (~10-15 seconds after startup). Now the icon appears
instantly with a "waiting for first event check" tooltip.
On validation or async failure, the icon stays visible and the
tooltip updates to show the error state instead of going blank.
|
| |
|
|
|
|
| |
The bell emoji lighter was redundant alongside the alarm clock
event display in global-mode-string. One icon is enough. Users
who want a separate mode indicator can set chime-modeline-lighter.
|
| |
|
|
|
|
|
|
|
|
| |
Bump chime-modeline-lookahead-minutes from 60 to 120 so events
within the next 2 hours show in the modeline. The old 60-minute
default hid events most users would expect to see.
Add (0 . high) to default chime-alert-intervals so users get a
notification at event time in addition to 10 minutes before.
The single-notification default meant a missed alert had no backup.
|
| |
|
|
|
|
|
|
| |
Clarify: dash cartesian product pipeline in chime--notifications,
butlast 2 dropping USEC/PSEC from time values, Emacs time type
guard, upcoming-events item structure, rx macroexpand for async
env injection, backquoted lambda subprocess boundary, and
org-end-of-meta-data nil argument meaning.
|
| |
|
|
|
|
|
|
|
|
|
| |
Remove chime--agenda-buffer-name (unused variable) and
chime--extract-birthday-year (superseded by chime--parse-birthday).
Reduce chime-tooltip-lookahead-hours from 8760 (1 year) to 168
(1 week). The 1-year default caused org-agenda-list to scan a
365-day span every check cycle, which is slow for large org
collections. The tooltip only shows 5 events, so a week is
sufficient for most users.
|
| |
|
|
|
|
|
|
|
| |
Performance improvements with no behavioral change:
- chime--group-events-by-day: hoist decode-time calls before loop
- chime-event-has-any-passed-time: compute today-start once, not per timestamp
- chime-event-is-today: same pattern
- chime--build-upcoming-events-list: remove first sort (discarded by hash dedup)
- chime--process-notifications: use -mapcat instead of -map + -flatten
|
| |
|
|
|
| |
The timer variable was left pointing at a cancelled timer object.
Now set to nil so state accurately reflects no active timer.
|
| |
|
|
|
|
| |
Move the all-day timestamp date arithmetic into chime--days-until-event.
The notification text function now reads clearly as a cond dispatch
over today/advance-notice/fallback cases.
|
| |
|
|
|
|
| |
The validation/retry state machine was 30 lines embedded in chime-check.
Now chime--maybe-validate returns t if OK to proceed, nil to skip.
chime-check is reduced to 12 lines: validate, then fetch-and-process.
|
| |
|
|
|
|
| |
Move interactive display (message/display-warning calls) into
chime--display-validation-results. The validation function stays
focused on collecting issues; display is a separate concern.
|
| |
|
|
|
|
|
|
|
| |
Decompose the 72-line function into focused helpers:
- chime--extract-gcal-timestamps: org-gcal drawer extraction
- chime--extract-property-timestamps: SCHEDULED/DEADLINE properties
- chime--extract-plain-timestamps: plain body timestamps
chime--extract-time is now a 12-line dispatcher.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
New test coverage for previously untested functions:
- filter-day-wide-events, time utilities, day-wide time matching
- make-tooltip, event-is-today, get-tags, done-keywords-predicate
- extract-title, propertize-modeline-string, warn-persistent-failures
- log-silently
Bug fixes discovered by new tests:
- Fix pluralization in no-events tooltip ("1 hours" -> "1 hour", etc.)
- Fix chime--get-tags returning ("") instead of nil for untagged headings
|
| |
|
|
|
|
| |
Tracks consecutive async check failures and displays a warning via
display-warning when the threshold is reached (default 5). Resets
on any successful check.
|
| |
|
|
|
| |
Adds locate-library as a fallback between load-file-name and
buffer-file-name for more robust path resolution in MELPA installs.
|
| | |
|
| |
|
|
|
|
|
| |
Add optional context parameter to chime--timestamp-parse and pass
the org heading title from chime--extract-time. Error messages now
show which event failed, e.g. "Failed to parse timestamp '...' in
'Team Meeting': ..."
|
| |
|
|
|
|
| |
Use chime--jump-to-first-event instead of a closure capturing
soonest-event. Improves debuggability and removes unused parameter
from chime--propertize-modeline-string.
|
| | |
|
| |
|
|
|
| |
Declare chime-debug-enable-async-monitoring, chime--debug-log-async-error,
and chime--debug-log-async-complete to suppress byte-compiler warnings.
|
| |
|
|
|
|
|
| |
- chime-predicate-whitelist: (function) -> (repeat function)
- chime-predicate-blacklist: (function) -> (repeat function)
- chime-additional-environment-regexes: (string) -> (repeat string)
- chime-notification-icon: string -> choice of nil or file path
|
| |
|
|
|
|
| |
Package uses decoded-time-* accessors, time-equal-p (27.1+), and
subr-x functions (when-let*, hash-table-values, string-empty-p).
Remove stale "Emacs 26 compatibility" comments.
|
| |
|
|
|
|
|
|
|
| |
Fix backronym to "CHIME Heralds Imminent Modeline Events" across all
files. Update GitHub URLs from chime.el to chime. Add documentation
for missing customization variables (notification icon, startup delay,
modeline lighter, no-events text, tooltip header format, advance
notice, tooltip all-day events). Fix test count (505) and default
for chime-day-wide-alert-times.
|
| |
|
|
|
|
|
|
|
| |
14 ;;;; headers added for code navigation: Dependencies, Customization
Variables, Internal State, Time/Date Utilities, All-Day Event Handling,
Event Checking & Navigation, Modeline & Tooltip Display,
Whitelist/Blacklist Filtering, Async Event Retrieval, Notification
Dispatch, Timestamp Parsing, Event Info Extraction, Configuration
Validation, Core Lifecycle. Comments only — zero runtime impact.
|
| |
|
|
|
| |
Updated 41 files: chime.el, chime-debug.el, chime-org-contacts.el,
convert-org-contacts-birthdays.el, and all test/utility files.
|
| |
|
|
|
|
|
| |
chime--time= was using %d:%H:%M (day-of-month only), causing false matches
across different months/years. Now uses %Y-%m-%d %H:%M for full date comparison.
chime--timestamp-within-interval-p now accepts numeric timestamps (integer/float)
in addition to lists.
|
| |
|