<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/modules/chrono-tools.el, 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-05-24T21:57:56+00:00</updated>
<entry>
<title>docs(load-graph): classify domain, integration, and optional modules</title>
<updated>2026-05-24T21:57:56+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-24T21:57:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=cad351ec00c3f78cfb6e203d87c7309a620e485c'/>
<id>urn:sha1:cad351ec00c3f78cfb6e203d87c7309a620e485c</id>
<content type='text'>
Eighth classification batch: 17 domain/integration/optional modules — ai-config, ai-vterm, browser-config, calendar-sync, calibredb-epub-config, chrono-tools, dirvish-config, dwim-shell-config, erc-config, eshell-config, eww-config, flyspell-and-abbrev, games-config, gloss-config, httpd-config, jumper, latex-config. I annotated each header, added a Batch 8 table to the inventory, and extended the validation allowlist. 82 of 102 modules are now classified.

Almost all are eager only by init order and become command/hook/mode-loaded. calendar-sync stays eager when its .local.el is present. One new hidden dependency: calendar-sync guards its C-; g registration with a boundp shim and doesn't require keybindings, so the binding drops standalone.

I deferred elfeed-config rather than annotate it. Its header edit triggers byte-compilation, and the existing tests only pass when the module loads as interpreted source — the compiled cj/elfeed-process-entries inlines an elfeed struct accessor the stubs can't intercept, and the batch test environment has no elfeed package to build real structs. It needs its tests rewritten first, recorded in the inventory and a new todo task.

Also made the header allowlist scoping test durable: it used games-config (now classified) as its unclassified example; switched to a sentinel name plus a duplicate-entry guard.
</content>
</entry>
<entry>
<title>refactor: consolidate runtime state into persist/</title>
<updated>2026-05-16T17:20:44+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-16T17:20:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=43022b56569717f28fa16284f7092f2bbe0830ad'/>
<id>urn:sha1:43022b56569717f28fa16284f7092f2bbe0830ad</id>
<content type='text'>
Six previously-scattered runtime state files now live under persist/
in user-emacs-directory:

- theme-file (was .emacs-theme)
- pdf-view-restore-filename (was .pdf-view-restore)
- time-zones--city-list-file (was .time-zones.el)
- calendar-sync--state-file (was data/calendar-sync-state.el)
- prescient-save-file (was var/prescient-save.el)
- org-id-locations-file (was .org-id-locations)

The defaults in each module now expand to persist/&lt;name&gt; instead of
the user-emacs-directory root or ad-hoc subdirs.  Existing files
moved into persist/ alongside this change so the next launch picks
up the state without regenerating.

test-ui-theme-default-theme-file-is-emacs-dotfile renamed to
test-ui-theme-default-theme-file-is-under-persist and updated to
assert the new default path.

lsp-session-file is left at the root for now -- prog-lsp.el has no
(require) reference anywhere, so the use-package block that would
carry the redirect never runs.  Tier 3 follow-up: confirm the module
is dead, then delete it or wire it into the load chain.

The var/ directory is now empty and removed.  data/ retains the
calendar agenda content (dcal/gcal/pcal.org) and the .rest API
examples -- content, not state, stays where it is.
</content>
</entry>
<entry>
<title>refactor(foundation): hygiene pass across early-init, user-constants, system-defaults, chrono-tools</title>
<updated>2026-05-16T07:35:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-16T07:35:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=1c5a2ebab7c721d795ed9331afdb305fd683e172'/>
<id>urn:sha1:1c5a2ebab7c721d795ed9331afdb305fd683e172</id>
<content type='text'>
Six small fixes the 2026-05-15 module-by-module re-review surfaced:

- Consolidate `user-home-dir` -- canonical defconst stays in
  early-init.el (package-archive bootstrap needs it before normal
  modules load); user-constants.el switches to a `defvar` with the
  identical `(getenv "HOME")` expression so the module still loads /
  byte-compiles standalone, but at runtime early-init's defconst
  wins.
- Drop the redundant `(autoload 'env-bsd-p ...)` line in
  system-defaults.el.  The `(eval-when-compile (require
  'host-environment))` already exposes the symbol to the byte
  compiler, and at runtime host-environment is loaded earlier in
  init.el.  Added a comment documenting the boundary.
- Convert `cj/debug-modules` and `cj/use-online-repos` from `defvar`
  to `defcustom`, with `:type`, `:group 'cj`, and a top-level
  `(defgroup cj ...)` so both show up in M-x customize.
- Name the package-archive priorities in early-init.el.  Nine new
  defconsts replace the magic numbers (200 / 125 / 120 / 115 / 100 /
  25 / 20 / 15 / 5) with one constant each, plus a header comment
  explaining the local-first ordering and the gnu &gt; nongnu &gt; melpa &gt;
  melpa-stable trust ranking within each tier.
- Delete the 19-line commented-out `use-package time` world-clock
  block in chrono-tools.el.  `time-zones` immediately above is the
  active replacement; git history preserves the old config if anyone
  needs it.
- Add coverage for `cj/tmr-select-sound-file`.  Collapsed the
  prefix-arg branch into a delegation to
  `cj/tmr-reset-sound-to-default` (single reset source) and
  extracted `cj/tmr--available-sound-files` as a pure helper that
  tests directly.  9 ERT tests across Normal / Boundary / Error
  cover the available-sounds helper, the reset path, the prefix-arg
  delegation (no prompt), the normal selection path, and the
  empty-dir / missing-dir / cancel boundaries.
</content>
</entry>
<entry>
<title>fix(chrono-tools): correct undefined variable in timer reset message</title>
<updated>2026-02-16T04:16:57+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-16T04:16:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=b4ad7954eae625ba69a98812a5d488c8ddb936c2'/>
<id>urn:sha1:b4ad7954eae625ba69a98812a5d488c8ddb936c2</id>
<content type='text'>
notification-package → notification-sound in cj/tmr-reset-sound-to-default.
Also remove 10 untestable modules from ERT checklist [13/14].
</content>
</entry>
<entry>
<title>fix(chrono-tools): fix trailing paren in time-zones binding</title>
<updated>2026-01-24T18:25:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-24T18:25:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=0e9efdfc656c234521fa97db99904257a3614ccd'/>
<id>urn:sha1:0e9efdfc656c234521fa97db99904257a3614ccd</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(terminal): add console/mosh compatibility</title>
<updated>2026-01-24T04:42:10+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-01-24T04:42:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=3ed0e8ea7c39ea0eaaa48506b7b99dee5ee6ca30'/>
<id>urn:sha1:3ed0e8ea7c39ea0eaaa48506b7b99dee5ee6ca30</id>
<content type='text'>
- Create terminal-compat.el for arrow key escape sequences
- Fix M-uppercase keybindings (M-O → M-S-o, etc.) that conflicted
  with terminal escape sequences ESC O A/B/C/D
- Add GUI-only guards for emojify and icon rendering
- 18 keybindings updated across 13 modules with override comments
</content>
</entry>
<entry>
<title>refactor(keybindings): reorganize time-zones and kill-buffer-and-window bindings</title>
<updated>2025-11-24T11:36:01+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-24T11:36:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=b3f9844628f98bb2edbbdadae872c175e3c65a75'/>
<id>urn:sha1:b3f9844628f98bb2edbbdadae872c175e3c65a75</id>
<content type='text'>
Move time-zones from C-x c to M-C for easier access. Move
cj/kill-buffer-and-window from M-C to C-; b k to group with other buffer
operations. Updated documentation and which-key labels.
</content>
</entry>
<entry>
<title>chrono-tools: integrate and test time-zones package</title>
<updated>2025-11-11T23:42:30+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-11T23:41:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=4e6374d363194077a344d95c5290bc6386650a57'/>
<id>urn:sha1:4e6374d363194077a344d95c5290bc6386650a57</id>
<content type='text'>
Replaced the world-clock configuration with the new time-zones
package to provide an interactive world clock with fuzzy search and
time shifting features. The previous world-clock code is commented
out for potential fallback testing.
</content>
</entry>
<entry>
<title>feat: calendar: fix calendar navigation keys to be more intuitive</title>
<updated>2025-10-15T20:27:25+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-15T20:27:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=68e67bbe9b351b1d5498cf7b9ee752a78c8f24e8'/>
<id>urn:sha1:68e67bbe9b351b1d5498cf7b9ee752a78c8f24e8</id>
<content type='text'>
arrow keys move by day
C-arrow move by month
M-arrow move by year
</content>
</entry>
<entry>
<title>changing repositories</title>
<updated>2025-10-12T16:47:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-12T16:47:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=092304d9e0ccc37cc0ddaa9b136457e56a1cac20'/>
<id>urn:sha1:092304d9e0ccc37cc0ddaa9b136457e56a1cac20</id>
<content type='text'>
</content>
</entry>
</feed>
