<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs.git/modules/mousetrap-mode.el, branch v0.7.2</title>
<subtitle>my Emacs configuration
</subtitle>
<id>https://git.cjennings.net/dotemacs.git/atom?h=v0.7.2</id>
<link rel='self' href='https://git.cjennings.net/dotemacs.git/atom?h=v0.7.2'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/'/>
<updated>2026-02-20T19:31:36+00:00</updated>
<entry>
<title>fix(mousetrap): use buffer-local keymaps via emulation-mode-map-alists</title>
<updated>2026-02-20T19:31:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-20T19:31:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=e7b8c249b67ee999e506918a10ce7dd56e45ded0'/>
<id>urn:sha1:e7b8c249b67ee999e506918a10ce7dd56e45ded0</id>
<content type='text'>
minor-mode-map-alist is global, so the last buffer to set its keymap
won for all buffers. Dashboard's scroll+primary profile was immediately
overwritten by other buffers' disabled profile. Switch to
emulation-mode-map-alists with a buffer-local variable so each buffer
gets its own independent keymap. Fixes dashboard click navigation.
</content>
</entry>
<entry>
<title>test: add 86 new tests, fix 3 production bugs, fix 8 stale tests</title>
<updated>2026-02-16T01:58:15+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-16T01:58:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=61bfb79f2c55983697f87b9ba3961a9fb46de2fe'/>
<id>urn:sha1:61bfb79f2c55983697f87b9ba3961a9fb46de2fe</id>
<content type='text'>
New test coverage (86 tests across 7 files):
- custom-case: 43 tests (title-case-region, upcase-dwim, downcase-dwim)
- custom-datetime: 10 tests (all insert methods with mocked time)
- config-utilities: 11 tests (format-build-time type branching)
- org-capture-config: 22 tests (date-prefix + event-content)

Production bugs found and fixed:
- custom-case: title-case-region crashes on whitespace/punctuation-only input
  (char-after returns nil when no word chars found)
- org-capture-config: browser branch missing empty-string guard on :initial
  plist value, producing stray newline in capture output
- mousetrap-mode: keymap never registered in minor-mode-map-alist, so mode
  was silently not blocking any mouse events. Now pushes/removes on toggle.

Additional fixes:
- local-repository: fix cons cell syntax bug in localrepo-initialize
  (was calling vars as functions instead of using cons)
- dupre-theme tests: update rainbow-delimiter color expectations
- mousetrap tests: update dashboard profile (primary-click → scroll+primary)
- music completion test: bind completion-ignore-case to prevent pollution
- Delete redundant interactive recording test (duplicate of ERT version)

Refactoring:
- org-capture-config: extract cj/org-capture--date-prefix pure function
  from cj/org-capture-format-event-headline for testability

Test checklist: todo.org updated to [11/25], removed untestable modules
</content>
</entry>
<entry>
<title>fix(mousetrap): Fix dashboard click/scroll blocking issue</title>
<updated>2025-11-15T10:13:45+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-15T10:13:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=6ea8bf890d9db7f936f4e9aa12ee8f5843a54618'/>
<id>urn:sha1:6ea8bf890d9db7f936f4e9aa12ee8f5843a54618</id>
<content type='text'>
- Change dashboard profile from primary-click to scroll+primary
  (allows both scrolling and left-clicking in dashboard)
- Remove incorrect manual manipulation of minor-mode-map-alist
  (define-minor-mode handles this automatically via mouse-trap-mode-map)
- Simplify disable logic to just clear the buffer-local keymap

The bug was that manually prepending to minor-mode-map-alist interfered
with Emacs' automatic buffer-local keymap lookup. Now each buffer gets
its own keymap based on major mode, and Emacs handles the lookup correctly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mousetrap): Add profile-based architecture and clickable lighter</title>
<updated>2025-11-14T07:22:36+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-14T07:22:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=1534be5b365431c885c4c5c09c7f157d94a9f942'/>
<id>urn:sha1:1534be5b365431c885c4c5c09c7f157d94a9f942</id>
<content type='text'>
Implement comprehensive profile-based system for selective mouse event
control with dynamic lighter and interactive toggling.

Features:
- Profile-based architecture (7 profiles: disabled, scroll-only,
  primary-click, scroll+primary, read-only, interactive, full)
- Mode-specific configuration (dashboard, pdf-view, nov)
- Dynamic keymap building based on current major mode
- Clickable modeline lighter (🐭 when off, 🪤 when on)
- Dynamic reconfiguration without Emacs reload
- Mode inheritance support via derived-mode-p

Profiles define which event categories are allowed:
- primary-click: Left mouse button only
- secondary-click: Middle and right buttons
- drags: Drag selections
- multi-clicks: Double and triple clicks
- scroll: Mouse wheel/trackpad scrolling

Default configuration:
- dashboard-mode: primary-click (left-click only)
- pdf-view-mode: full (all events)
- nov-mode: full (all events)
- Other modes: disabled (all events blocked)

Tests:
- 66 comprehensive tests across 5 test files
- Unit tests for profile lookup and keymap building
- Integration tests for mode switching and dynamic config
- Lighter functionality and click interaction tests
- All tests passing

Known issue:
- Dashboard-mode clicks blocked despite primary-click profile
- Documented in todo.org for investigation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(mousetrap): Add configurable mouse wheel scrolling</title>
<updated>2025-11-14T05:40:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-14T05:40:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=ce58581c4a8cc00054e063d4bbf4fbbaeb0a7b35'/>
<id>urn:sha1:ce58581c4a8cc00054e063d4bbf4fbbaeb0a7b35</id>
<content type='text'>
Added `mouse-trap-enable-scrolling` variable to allow mouse wheel
scrolling while still blocking clicks and drags. Defaults to enabled
for better usability - users can still scroll with mouse/trackpad
but accidental clicks are prevented.

- Added defvar mouse-trap-enable-scrolling (default: t)
- Conditionally bind wheel events based on variable
- Updated docstrings to reflect new behavior
- Works for both mouse wheel and trackpad two-finger scrolling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</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.git/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>feat:mouse-trap-mode: add buffer-local activation and excluded modes</title>
<updated>2025-10-20T18:25:21+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-20T18:25:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=2c41142debe94e7863f1c5365e5f865b1e67cc6a'/>
<id>urn:sha1:2c41142debe94e7863f1c5365e5f865b1e67cc6a</id>
<content type='text'>
Modify `mouse-trap-mode` to activate buffer-locally and add an
exclusion list of major modes where the mode should not be enabled.
Update description and bindings for improved text and prog mode
integration.
</content>
</entry>
<entry>
<title>feat: mousetrap-mode: move  mousetrap-mode from wip into module</title>
<updated>2025-10-12T17:08:31+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-10-12T17:08:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=938c2402c0444f52257f8d5a4513f2f6898db084'/>
<id>urn:sha1:938c2402c0444f52257f8d5a4513f2f6898db084</id>
<content type='text'>
</content>
</entry>
</feed>
