<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/tests, branch main</title>
<subtitle>My Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/dotemacs/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/'/>
<updated>2026-07-24T06:02:54+00:00</updated>
<entry>
<title>fix(auto-dim): stop the minibuffer from re-dimming the window you left</title>
<updated>2026-07-24T06:02:54+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-24T06:02:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=7e5aa31731a6d6446055729fb7597d549ff637f4'/>
<id>urn:sha1:7e5aa31731a6d6446055729fb7597d549ff637f4</id>
<content type='text'>
- Opening the minibuffer dimmed whatever window you had just left.
- Dimming follows selection, and the minibuffer takes selection.
- auto-dim-other-buffers-dim-on-switch-to-minibuffer sat at its package default of t.
- Set it to nil, so minibuffer entry leaves the dim state alone.
</content>
</entry>
<entry>
<title>fix: make the Full Agenda frame's default-deny actually deny</title>
<updated>2026-07-22T04:12:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-22T04:12:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=32017dc068d7579e789c5e753ae35f6f10c3d5b3'/>
<id>urn:sha1:32017dc068d7579e789c5e753ae35f6f10c3d5b3</id>
<content type='text'>
The frame's read-only policy leaned on a [t] catch-all, but a keymap's default binding never shadows an explicit binding in a lower-priority map. So every key org-agenda-mode-map binds sailed through the catch-all and could mutate source files from the "read-only" frame: t (todo), I (clock-in), k (capture), z (add-note), s (save-all), the C-c schedule/deadline/clock mutators, C-x C-s.

Walk org-agenda-mode-map recursively on load and explicitly deny every sequence not on the frame's allowlist, so the catch-all's intent holds. Navigation, engage, refresh, d/w, and C-c C-o still work, and M-x is unaffected.
</content>
</entry>
<entry>
<title>feat(music): move single to 1, save to s, drop the stop key</title>
<updated>2026-07-22T03:25:01+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-22T03:25:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=deedf75cead6e8860f66f5e9e5fe66b8ed92f083'/>
<id>urn:sha1:deedf75cead6e8860f66f5e9e5fe66b8ed92f083</id>
<content type='text'>
In the playlist buffer, single-track mode moves off s onto 1 and save moves off v onto s. The stop key (S) is gone, since SPC/pause already covers stopping. The Mode/Keys header legend follows, and v is now unbound. Stop is still reachable from the global music prefix (C-; m s).
</content>
</entry>
<entry>
<title>feat: add d/w day/week view toggle to the Full Agenda frame</title>
<updated>2026-07-22T00:54:12+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-22T00:54:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=a1b5ad8ee7bc808d166ce89998aac8ae7bd67840'/>
<id>urn:sha1:a1b5ad8ee7bc808d166ce89998aac8ae7bd67840</id>
<content type='text'>
The frame was locked to the 7-day span, with d and w denied as view-changes. The span is now a variable the F command reads. Org re-evaluates custom-command settings on every build and redo, so a day view survives the 5-minute refresh tick. d shows today's single day, w restores the 7-day view, and each spawn resets to 7 so a fresh frame opens at the default. The remaining date-navigation keys (y/f/b/j) stay denied to keep the frame today-anchored.
</content>
</entry>
<entry>
<title>fix: stop M-SPC / M-S-SPC escaping the Full Agenda frame</title>
<updated>2026-07-21T23:24:47+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T23:24:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=59231c40190f200c2272d0275b2d9dc41d34fcef'/>
<id>urn:sha1:59231c40190f200c2272d0275b2d9dc41d34fcef</id>
<content type='text'>
M-SPC and M-S-SPC (the ai-term agent-swap chords) are bound in the global map, so pressing them inside the read-only frame jumped to ai-term instead of being contained. The frame's [t] catch-all can't deny them: a keymap's default binding doesn't shadow an explicit binding in a lower-priority map. Deny both explicitly in the frame keymap.
</content>
</entry>
<entry>
<title>fix: bind g to refresh inside the Full Agenda frame</title>
<updated>2026-07-21T23:21:06+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T23:21:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=98dd0dfb24136f82e8f3b800b2fdb2bedd86324b'/>
<id>urn:sha1:98dd0dfb24136f82e8f3b800b2fdb2bedd86324b</id>
<content type='text'>
The frame's default-deny policy classed g as a view-change and denied it, so the muscle-memory refresh key printed the fixed-view message instead of rebuilding. Bind g to the same frame-scoped safe redo as r. C-M-&lt;f8&gt; stays the force-rescan.
</content>
</entry>
<entry>
<title>refactor(elfeed): remove dead cj/extract-stream-url</title>
<updated>2026-07-21T11:47:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T11:47:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=78e2283f16dc2cebcd80f8e77d5e26ad0a898642'/>
<id>urn:sha1:78e2283f16dc2cebcd80f8e77d5e26ad0a898642</id>
<content type='text'>
No production caller existed, and the v binding already plays entries through mpv, which resolves YouTube pages via its own yt-dlp hook internally, so the manual stream-URL extraction was fully superseded. Its tests go with it; the process-entries coverage stays.
</content>
</entry>
<entry>
<title>fix(system): resolve the locker at command time, not module load</title>
<updated>2026-07-21T11:37:18+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T11:37:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=4f28daa3754c69f9fb3288bc7cdb5858f047f009'/>
<id>urn:sha1:4f28daa3754c69f9fb3288bc7cdb5858f047f009</id>
<content type='text'>
lockscreen-cmd baked (env-wayland-p) into a defvar at load, so a daemon started before WAYLAND_DISPLAY reached its environment froze the locker to slock and Lock failed silently on Wayland. The lock command now resolves per call, with lockscreen-cmd kept as an explicit override. Craig confirmed the fix over the decline option since it also makes the systemd unit path safe to revive.
</content>
</entry>
<entry>
<title>test: make the 31st-recurrence and immediate-insert tests env-stable</title>
<updated>2026-07-21T04:50:59+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T04:50:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=0fa283a3a828bd99260792a4fffd772b2cec5bc0'/>
<id>urn:sha1:0fa283a3a828bd99260792a4fffd772b2cec5bc0</id>
<content type='text'>
The calendar test's range ended at midnight Dec 31, excluding that day's occurrence, and the org-roam test asserted special-variable-p, which answers differently in the package-loaded hook env versus bare batch (a bare defvar is a file-local declaration). The recurrence test now ends the range past the year and the insert test asserts the binding behaviorally.
</content>
</entry>
<entry>
<title>perf(ai-term): fetch the tmux session list once per launch</title>
<updated>2026-07-21T04:44:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-07-21T04:44:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=e83a055602ea2ad6cf8de5909bcbd8e44f2b5c22'/>
<id>urn:sha1:e83a055602ea2ad6cf8de5909bcbd8e44f2b5c22</id>
<content type='text'>
The launch path spawned tmux list-sessions up to three times: in the project picker's sorting, in the launcher's fresh check, and again inside show-or-create. The list is now fetched once and threaded through; the cycling path still fetches its own.
</content>
</entry>
</feed>
