<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs/modules/custom-misc.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-25T00:59:28+00:00</updated>
<entry>
<title>refactor(load-graph): route C-; registration through the keymap API</title>
<updated>2026-05-25T00:59:28+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-25T00:59:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=08014b2f15e099a1c5e662a17a41290f37aeebf4'/>
<id>urn:sha1:08014b2f15e099a1c5e662a17a41290f37aeebf4</id>
<content type='text'>
Migrated all 31 cj/custom-keymap registration sites across 24 modules from direct (keymap-set cj/custom-keymap ...) calls to cj/register-prefix-map and cj/register-command. Consumers no longer reference cj/custom-keymap directly, so keybindings.el is the sole owner of the C-; prefix and modules reach it only through the API (each already requires keybindings from Phase 2).

Behavior-preserving: I dumped every C-; binding before and after the migration and they're identical: 279 bindings, each resolving to the same command. The which-key label blocks are untouched, since they use string key descriptions and never assumed the keymap existed. I byte-compiled all 24 files (no new free-variable warnings, because the cj/custom-keymap references are gone), and make test, validate-modules, and an init load all pass.
</content>
</entry>
<entry>
<title>docs(load-graph): classify text/editing command modules</title>
<updated>2026-05-24T21:20:01+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-24T21:20:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=1dfd02da826d61d528fe42c5bee3c5dbcf098c82'/>
<id>urn:sha1:1dfd02da826d61d528fe42c5bee3c5dbcf098c82</id>
<content type='text'>
Second classification batch: the nine custom-* text/editing command helpers (case, comments, datetime, buffer-file, line-paragraph, misc, ordering, text-enclose, whitespace). I annotated each with the load-graph header contract and added a Batch 2 table to the inventory. They're all Layer 2, eager only to register a C-; submap at load, with no necessary eager reason, so all are Phase 3/4 deferral candidates.

The inventory records a second hidden dependency for Phase 2: custom-buffer-file guards its C-; b registration with (when (boundp 'cj/custom-keymap) ...) and declares the keymap only via eval-when-compile, so the binding silently drops when the module loads without keybindings.
</content>
</entry>
<entry>
<title>chore(modules): pass validate-modules in batch by adding requires</title>
<updated>2026-05-08T00:25:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-08T00:25:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=a41ef9774f6550da446a3ae8fbbcbcd5bf6c23c4'/>
<id>urn:sha1:a41ef9774f6550da446a3ae8fbbcbcd5bf6c23c4</id>
<content type='text'>
`make validate-modules` had 19 module-load failures, all the same shape: a module references a symbol or feature owned by another module without saying so. Production was fine because init.el orders requires correctly. The batch target loads each module in isolation, though, and surfaces the gap.

I added explicit `(require 'keybindings)` or `(require 'user-constants)` to each affected module. The requires are idempotent at runtime, so production load order is unchanged. For three optional packages (elpa-mirror, mu4e, org-contacts), I switched to `(require 'X nil t)` so the modules load cleanly when those packages aren't installed. The activation calls become no-ops in that case.

`make validate-modules` now reports 0 failures.
</content>
</entry>
<entry>
<title>chore:custom-misc: update keybindings for word/char count</title>
<updated>2025-10-31T17:06:29+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-31T17:06:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=eb9284fd676e06f481b2fbb4d50c0a1ea36fe142'/>
<id>urn:sha1:eb9284fd676e06f481b2fbb4d50c0a1ea36fe142</id>
<content type='text'>
Change keybindings for counting words and characters to "# w" and "#
c" to improve mnemonic efficiency. Update the corresponding
which-key descriptions accordingly.
</content>
</entry>
<entry>
<title>feat:count-characters: Add character counting functionality</title>
<updated>2025-10-31T10:55:26+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-31T10:54:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=eb0bd2e4a0592aaae2825548b594b2b3c579c0b6'/>
<id>urn:sha1:eb0bd2e4a0592aaae2825548b594b2b3c579c0b6</id>
<content type='text'>
Introduce functions to count characters in a buffer or region. Bind
new character counting function to "C-; C" in custom keymap.
</content>
</entry>
<entry>
<title>feat:which-key: Add descriptive labels for custom keymaps</title>
<updated>2025-10-27T23:45:23+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-27T23:45:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=87034eab17625165b884128d8058c1158fc2f50f'/>
<id>urn:sha1:87034eab17625165b884128d8058c1158fc2f50f</id>
<content type='text'>
Enhance which-key integration by providing detailed descriptions for
new key bindings across multiple modules. This improves the
usability of custom keymaps by clarifying the purpose of each
keybinding, making it easier for users to navigate and understand
different menus and options available within the configuration.

This update ensures that all custom keymaps now display a
descriptive label in the which-key popup to explain their
functionality, aiding users in identifying keymap purposes promptly.
</content>
</entry>
<entry>
<title> test+fix:custom-misc: add tests and fix fraction glyph bug</title>
<updated>2025-10-27T02:21:38+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-27T02:21:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=03719a065c21bf683a9b90c83ab26ee0dc069cc7'/>
<id>urn:sha1:03719a065c21bf683a9b90c83ab26ee0dc069cc7</id>
<content type='text'>
  Add test coverage for 4 functions in custom-misc.el:

  - cj/replace-fraction-glyphs (24 tests)
  - cj/format-region-or-buffer (17 tests)
  - cj/count-words-buffer-or-region (20 tests)
  - cj/jump-to-matching-paren (18 tests)

  Refactored functions using internal/interactive split pattern:
  - Internal functions (cj/--function-name) contain business logic with
    explicit parameters and validation
  - Interactive wrappers handle UI concerns (region detection, messages)
  - Tests call internal functions directly (no mocking required)

  Bug Fix: cj/--replace-fraction-glyphs
  Fixed "Invalid search bound" error when converting glyphs to text.
  Original code used fixed end position which became invalid when
  replacements changed buffer size. Fixed by using copy-marker for
  dynamic end position tracking.
</content>
</entry>
<entry>
<title>feat:custom-misc: added switch to previous buffer C-; SPC</title>
<updated>2025-10-21T22:34:05+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-21T22:34:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=46f9e37218a7498e57c0bf3e85cc0421e0e7a983'/>
<id>urn:sha1:46f9e37218a7498e57c0bf3e85cc0421e0e7a983</id>
<content type='text'>
</content>
</entry>
<entry>
<title>moved toggle-debug-on error keybindign to config-utils</title>
<updated>2025-10-21T21:49:57+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-21T21:49:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=bd82619011c244e94f01f487b83345f344794e1d'/>
<id>urn:sha1:bd82619011c244e94f01f487b83345f344794e1d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: custom-misc: correct custom-keymap evaluation</title>
<updated>2025-10-20T14:04:47+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-20T14:04:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs/commit/?id=97134d631ec43b57827006ffebde0f85992fff47'/>
<id>urn:sha1:97134d631ec43b57827006ffebde0f85992fff47</id>
<content type='text'>
Changed the evaluation of `cj/custom-keymap` to use `defvar` for
proper reference, fixing potential issues in compilation without
requiring 'keybindings'.
</content>
</entry>
</feed>
