<feed xmlns='http://www.w3.org/2005/Atom'>
<title>chime, branch v0.7.0</title>
<subtitle>Emacs chimes, notifications, and modeline reminders so you don't miss events
</subtitle>
<id>https://git.cjennings.net/chime/atom?h=v0.7.0</id>
<link rel='self' href='https://git.cjennings.net/chime/atom?h=v0.7.0'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/'/>
<updated>2026-05-05T10:20:34+00:00</updated>
<entry>
<title>chore: bump version to 0.7.0</title>
<updated>2026-05-05T10:20:34+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T10:20:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=1487cbc03d1c447e9c4b31bfbe44330df10a6d29'/>
<id>urn:sha1:1487cbc03d1c447e9c4b31bfbe44330df10a6d29</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>fix: skip declined events in tooltip, modeline, and notifications</title>
<updated>2026-05-05T10:15:59+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T10:15:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=e4a254453dedacafcca883a3b20302762c872280'/>
<id>urn:sha1:e4a254453dedacafcca883a3b20302762c872280</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>test: tag integration suite :slow and unstick test-all</title>
<updated>2026-05-05T10:12:11+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T10:12:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=fda1e989e0c22433b0214ab537a61852d906fd4b'/>
<id>urn:sha1:fda1e989e0c22433b0214ab537a61852d906fd4b</id>
<content type='text'>
I tagged the 15 end-to-end tests across `test-integration-chime-mode.el`,
`test-integration-recurring-events-tooltip.el`, and
`test-integration-startup.el` with `:tags '(:slow)`. The default `make test`
now runs only the 652 fast unit tests; `make test-all` runs the full 667.

While verifying, I hit a pre-existing bug in `tests/Makefile` where
`test-all`'s `--eval '(ert-run-tests-batch-and-exit)'` came back from eask's
argv passthrough with its quotes stripped, which broke shell parsing. Passing
the explicit `t` selector dodges whatever eask does to no-arg single-quoted
forms. The bug only mattered once integration tests were `:slow` — before
that, `test-all` overlapped fully with `test-unit` plus `test-integration`,
so nothing actually depended on it working.
</content>
</entry>
<entry>
<title>build: fail compile on byte-compile warnings</title>
<updated>2026-05-05T10:07:04+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T10:07:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=84949b4b1d767b10e400bdb126d6091f0684cd65'/>
<id>urn:sha1:84949b4b1d767b10e400bdb126d6091f0684cd65</id>
<content type='text'>
I set `byte-compile-error-on-warn` to t in the root `compile' target. The
warning backlog is clear, so any new warning should break the build instead
of slipping by silently.
</content>
</entry>
<entry>
<title>chore: drop non-standard keywords from chime.el header</title>
<updated>2026-05-05T10:06:48+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T10:06:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=f320da4632d014cfd576ce9ba7e65185d14f530a'/>
<id>urn:sha1:f320da4632d014cfd576ce9ba7e65185d14f530a</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>fix: remove unused `title` lexical in chime--process-notifications</title>
<updated>2026-05-05T09:57:33+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T09:57:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=8ac0dcdade83e791f2daf9720839e1b603d898b2'/>
<id>urn:sha1:8ac0dcdade83e791f2daf9720839e1b603d898b2</id>
<content type='text'>
`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.
</content>
</entry>
<entry>
<title>fix: trim chime--find-soonest-modeline-event docstring to &lt;=80 cols</title>
<updated>2026-05-05T09:57:25+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T09:57:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=4d3f8fa2b0f08fb9e67cd17240d0d6b93cb86f5f'/>
<id>urn:sha1:4d3f8fa2b0f08fb9e67cd17240d0d6b93cb86f5f</id>
<content type='text'>
`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.
</content>
</entry>
<entry>
<title>build: add eask manifest and setup/compile/coverage targets</title>
<updated>2026-05-05T09:57:14+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T09:57:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=e54041ac630fe31a9968cf41c452feee317a4049'/>
<id>urn:sha1:e54041ac630fe31a9968cf41c452feee317a4049</id>
<content type='text'>
I switched the test runner from `~/.emacs.d/elpa`-grep to eask. With
this, `make setup` installs every dep into a project-local `.eask/`,
so test runs don't depend on whatever's in my global elpa. It also
lets us catch missing Package-Requires entries before MELPA submission.

New targets:

- `make setup` — runs `eask install-deps --dev`
- `make compile` — byte-compiles chime.el and surfaces warnings that
  checkdoc and elisp-lint don't catch
- `make coverage` — runs the unit suite under undercover and writes a
  simplecov JSON to `.coverage/simplecov.json`
- `make test-all` — runs every test, including `:slow` tagged
- `-include makefile-local` in both Makefiles, for per-machine knobs

I added `ERT_FAST_SELECTOR` so `make test`, `test-unit`,
`test-integration`, and `test-file` exclude tests tagged `:slow`. When
we tag end-to-end integration tests as `:slow`, they'll stay out of
the fast feedback loop until someone explicitly asks for them via
`make test-all`.

Eask treats CWD as its workspace. So all eask invocations now run
from project root, with `(cd "tests/")' as the first `--eval' to
restore Emacs's default-directory. That preserves the relative loads
the existing test files and test-bootstrap.el rely on, without
touching either.

I updated `.gitignore` for `.eask/`, `.coverage/`, and the optional
`makefile-local` files.
</content>
</entry>
<entry>
<title>refactor: rewrite chime--time-left without threading-pcase</title>
<updated>2026-05-05T09:56:56+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-05T09:56:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=d8fd744b0669c6a4b3fb08fb4d75ab421c3a0416'/>
<id>urn:sha1:d8fd744b0669c6a4b3fb08fb4d75ab421c3a0416</id>
<content type='text'>
Edebug's defun parser rejects the `(-&gt; 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.
</content>
</entry>
<entry>
<title>adding to gitignore</title>
<updated>2026-04-24T12:33:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-24T12:33:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/chime/commit/?id=5108e05eeb395f1d66122c25c862b1401478853f'/>
<id>urn:sha1:5108e05eeb395f1d66122c25c862b1401478853f</id>
<content type='text'>
</content>
</entry>
</feed>
