aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Improve README quick start, manual install, and filtering docsCraig Jennings2026-04-041-59/+60
| | | | | | | | Rewrote Quick Start to show minimal config (just chime-mode 1) with defaults overview and modeline interaction guide. Expanded manual install with git clone steps. Fixed TOC nav links, made tag filter examples consistent, added custom predicate motivation, removed redundant Basic Event subsection.
* Add personality and reorganize READMECraig Jennings2026-04-041-264/+135
| | | | | | | Add Douglas Adams epigraph, funny event names throughout, voice in installation and history sections. Consolidate org-contacts into new Integrations section with org-gcal guide. Trim verbose all-day events interaction examples. Add severity, sound format, and icon docs.
* Fix TOC formatting in TESTING.orgCraig Jennings2026-04-041-3/+1
|
* Add table of contents to TESTING.orgCraig Jennings2026-04-041-0/+4
|
* Rewrite TESTING.org with current test infrastructureCraig Jennings2026-04-041-176/+275
| | | | | | Replaced stale 339-test/23-file doc with current state (645 tests, 53 files). Documents test-bootstrap.el, testutil libraries, Makefile consolidation, and all convenience macros.
* Remove duplicate COPYING fileCraig Jennings2026-04-041-674/+0
| | | | | LICENSE and COPYING were identical. Keep LICENSE since README links to it and GitHub recognizes it automatically.
* Consolidate Makefiles and update TESTING.orgCraig Jennings2026-04-042-129/+73
| | | | | | Root Makefile now delegates to tests/Makefile. Fixed stale UNIT_TESTS/INTEGRATION_TESTS definitions, added test-name target, switched to per-file test execution for better isolation.
* Add tests for chime-environment-regexCraig Jennings2026-04-041-0/+62
| | | | | Verify the regex matches all default variable names, picks up additional user-configured regexes, and handles empty additional list.
* Decompose chime--debug-notification-filtering into step functionsCraig Jennings2026-04-041-71/+71
| | | | | | | | | The 120-line diagnostic function is now a 30-line coordinator calling four focused helpers: - chime--debug-filter-check-timestamp - chime--debug-filter-check-time-match - chime--debug-filter-check-interval - chime--debug-filter-check-pipeline
* Remove unused chime--today functionCraig Jennings2026-04-042-88/+0
| | | | Defined and tested but never called from any production code.
* Bundle multiple day-wide events into a single notificationCraig Jennings2026-04-042-2/+67
| | | | | | | | | | 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.
* Restructure README and address review commentsCraig Jennings2026-04-043-151/+828
| | | | | | | | | | | | | | - Remove About section (merged into intro) - Rename Credits to History, fold Migration under it - Fold Manual Check and Known Limitations under Usage - Fold Full Example Configuration under Configuration - Add straight.el and quelpa install methods - Move requirements into Installation with auto-deps note - Add notification daemon check to troubleshooting - Add Development subsection with clone/lint/issues info - Add LICENSE file (GPL-3.0) - Update nav bar to match new structure - Fix startup integration test for new modeline error state
* Add horizontal nav bar and Made for GNU Emacs badge to READMECraig Jennings2026-04-042-20/+5
| | | | | Replace vertical table of contents with horizontal section links matching wttrin README style. Add Made for GNU Emacs badge.
* Show modeline icon immediately on chime-mode enableCraig Jennings2026-04-042-11/+92
| | | | | | | | | 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.
* Default modeline lighter to empty stringCraig Jennings2026-04-042-12/+10
| | | | | | 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.
* Improve defaults: 2-hour modeline window, notify at event timeCraig Jennings2026-04-042-9/+12
| | | | | | | | | | 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.
* Clean up README prose: remove AI-isms, fix typoCraig Jennings2026-04-041-20/+18
| | | | | | | | Remove promotional language (pleasant, extensive, comprehensive), flatten rule-of-three constructions, replace "interplay" heading, simplify tactical/strategic framing, drop redundant blacklist justification. Fix "begain" typo in credits. Trim duplicated Testing/Development pointers.
* Update README for accuracy and completenessCraig Jennings2026-04-041-41/+126
| | | | | | | | | | | | | | | | Fix stale content: - Tooltip lookahead default: 8760 hours -> 168 (1 week) - Test count: 505 -> 600+ - Emacs version: 26.1+ -> 27.1+ (matches Package-Requires) - Troubleshooting: fix stale convert-contacts-to-file reference to match current in-place conversion workflow Add missing documentation: - Custom predicate filtering with examples - chime-max-consecutive-failures, chime-validation-max-retries - chime-extra-alert-plist, chime-additional-environment-regexes - chime-refresh-modeline command - Debug mode section in Troubleshooting with all diagnostic commands
* Add comments for non-obvious code patternsCraig Jennings2026-04-041-7/+15
| | | | | | | | 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 dead code and reduce default tooltip lookahead to 1 weekCraig Jennings2026-04-043-38/+6
| | | | | | | | | | | 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.
* Hoist loop-invariant computations and remove redundant sortCraig Jennings2026-04-041-68/+53
| | | | | | | | | 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
* Nil chime--timer after cancellation in chime--stopCraig Jennings2026-04-042-0/+12
| | | | | The timer variable was left pointing at a cancelled timer object. Now set to nil so state accurately reflects no active timer.
* Fix file headers: correct copyright years, add missing headerCraig Jennings2026-04-0412-11/+28
| | | | | New files created in 2026 should have Copyright (C) 2026, not 2024-2026. Add standard copyright/license header to test-bootstrap.el.
* Extract days-until calculation from chime--day-wide-notification-textCraig Jennings2026-04-041-27/+22
| | | | | | 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.
* Extract validation retry logic from chime-check into chime--maybe-validateCraig Jennings2026-04-041-26/+25
| | | | | | 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.
* Extract display logic from chime-validate-configurationCraig Jennings2026-04-041-14/+14
| | | | | | 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.
* Extract test boilerplate into shared test-bootstrap.elCraig Jennings2026-04-0451-656/+96
| | | | | | | | | | All 50 test files that load chime.el repeated the same 8-line initialization block (package-initialize, ert, dash, alert, async, org-agenda, chime load). Replace with a single require of test-bootstrap.el. Also fix test-make-upcoming-item name collision between test-chime-make-tooltip.el and test-chime--deduplicate-events-by-title.el.
* Extract three timestamp strategies from chime--extract-timeCraig Jennings2026-04-041-54/+59
| | | | | | | | | 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.
* Consolidate birthday utilities into convert-org-contacts-birthdaysCraig Jennings2026-04-042-196/+16
| | | | | | | | | | chime-org-contacts.el duplicated parse, format, and insert-after-drawer functions from convert-org-contacts-birthdays.el. Remove the duplicates and have chime-org-contacts require the convert module instead. Removes ~35 lines of duplicated code. The finalize function now delegates to chime--insert-birthday-timestamp-after-drawer with condition-case for graceful handling of invalid birthday formats during capture.
* Add integration test for chime-mode deactivation cleanupCraig Jennings2026-04-041-0/+10
| | | | | Verifies disabling chime-mode removes chime-modeline-string from global-mode-string and sets it to nil.
* Add integration test for chime-mode modeline registrationCraig Jennings2026-04-041-0/+61
| | | | | Verifies enabling chime-mode adds chime-modeline-string to global-mode-string so events appear in the modeline.
* Add 94 tests across 10 new test files and fix 2 bugsCraig Jennings2026-04-0411-7/+1553
| | | | | | | | | | | | 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
* Add test config macros and migrate startup tests to use themCraig Jennings2026-02-262-155/+186
| | | | | | Add with-chime-config and with-org-event-file macros to testutil-events.el, replacing the manual defvar/save/restore pattern with let-bindings that auto-restore on exit. Migrate test-integration-startup.el as first adopter.
* Add persistent async failure warnings after consecutive errorsCraig Jennings2026-02-231-2/+30
| | | | | | Tracks consecutive async check failures and displays a warning via display-warning when the threshold is reached (default 5). Resets on any successful check.
* Use locate-library fallback for sound file path resolutionCraig Jennings2026-02-231-1/+4
| | | | | Adds locate-library as a fallback between load-file-name and buffer-file-name for more robust path resolution in MELPA installs.
* Improve org-agenda-files validation to distinguish files from directoriesCraig Jennings2026-02-232-11/+14
|
* Include event title in timestamp parse error messagesCraig Jennings2026-02-231-8/+13
| | | | | | | 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': ..."
* Fix flaky validation failure test by resetting shared stateCraig Jennings2026-02-231-0/+6
| | | | | | The test checks that chime-modeline-string and chime--upcoming-events are nil after early return, but previous tests could leave them set. Reset these and chime--validation-retry-count at test start.
* Replace anonymous lambda in modeline keymap with named functionCraig Jennings2026-02-231-8/+4
| | | | | | Use chime--jump-to-first-event instead of a closure capturing soonest-event. Improves debuggability and removes unused parameter from chime--propertize-modeline-string.
* Fix docstring grammar and remove double blank lineCraig Jennings2026-02-231-2/+1
|
* Add missing declare-function for chime-debug functionsCraig Jennings2026-02-231-0/+3
| | | | | Declare chime-debug-enable-async-monitoring, chime--debug-log-async-error, and chime--debug-log-async-complete to suppress byte-compiler warnings.
* Fix defcustom :type specs for list and nullable variablesCraig Jennings2026-02-231-4/+5
| | | | | | | - 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
* Bump minimum Emacs version to 27.1 and require subr-xCraig Jennings2026-02-231-3/+4
| | | | | | 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.
* Align inline comments in full example configurationCraig Jennings2026-02-221-7/+7
|
* Fix bold formatting in README for org-mode renderingCraig Jennings2026-02-221-35/+35
| | | | | Replace markdown-style **bold** with org-mode *bold* for correct rendering on GitHub.
* Update README and fix repo references after rename to chimeCraig Jennings2026-02-225-19/+136
| | | | | | | | | 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.
* Add section headers to chime.el for imenu/outline navigationCraig Jennings2026-02-191-0/+28
| | | | | | | | | 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.
* Update copyright years to 2026 across all source filesCraig Jennings2026-02-1741-41/+41
| | | | | Updated 41 files: chime.el, chime-debug.el, chime-org-contacts.el, convert-org-contacts-birthdays.el, and all test/utility files.
* Add notification boundary tests for time comparison fixCraig Jennings2026-02-171-0/+361
| | | | | 12 ERT tests covering exact interval matching, cross-month/year boundaries, midnight crossing, multiple intervals, and escalating notifications.
* Add notification filtering debugger to chime-debug.elCraig Jennings2026-02-171-0/+124
| | | | | | | Interactive function chime--debug-notification-filtering traces the entire notification pipeline: timestamp recognition, day-wide filtering, interval matching, and notification generation. Helps diagnose why notifications aren't firing for specific events.