<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dotemacs.git/modules/custom-buffer-file.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-25T18:07:12+00:00</updated>
<entry>
<title>feat(buffer): add open-with-default-app and open-with-program keybindings</title>
<updated>2026-02-25T18:07:12+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-25T18:07:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=f755e54ee94df29e345e5ca5d53ce95b6f53a9a7'/>
<id>urn:sha1:f755e54ee94df29e345e5ca5d53ce95b6f53a9a7</id>
<content type='text'>
Wire cj/xdg-open (C-; b o) and cj/open-this-file-with (C-; b O) into
the buffer keymap. Fix xdg-open fallback to try buffer-file-name before
dired context. Remove old C-c x o binding from external-open.
</content>
</entry>
<entry>
<title>feat(calendar-sync): add event details — attendees, organizer, status, URL</title>
<updated>2026-02-05T21:13:57+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-05T21:13:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=b7cb1c51e5663419344d8b55766635801f3ee4c8'/>
<id>urn:sha1:b7cb1c51e5663419344d8b55766635801f3ee4c8</id>
<content type='text'>
Add ICS text unescaping (RFC 5545), HTML stripping, and new fields
(attendees/status, organizer, meeting URL) to calendar-sync.el.
event-to-org now outputs org property drawers. 88 new tests across
10 test files, 146/146 pass. Also fix pre-existing test require
order and keymap guard issues.
</content>
</entry>
<entry>
<title>fix(email): require mm-decode at load time for macro availability</title>
<updated>2026-02-04T13:16:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-04T13:16:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=30f0418268a990478a745d8a0550e4f7ba0af750'/>
<id>urn:sha1:30f0418268a990478a745d8a0550e4f7ba0af750</id>
<content type='text'>
mm-handle-type is a macro that must be available when the code is
read, not just at runtime. Changed from declare-function to require.
</content>
</entry>
<entry>
<title>fix(email): improve MIME handle parsing for email viewer</title>
<updated>2026-02-04T11:54:45+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-04T11:54:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=13e8dc3549d5eefc4cc39659771e343d7a80a1ec'/>
<id>urn:sha1:13e8dc3549d5eefc4cc39659771e343d7a80a1ec</id>
<content type='text'>
- Add helper functions for robust MIME structure navigation
- cj/--email-handle-is-type-p: check handle content type
- cj/--email-find-displayable-part: recursively find HTML/plain text
- Handle both leaf handles and nested multipart structures
- Add 9 unit tests covering normal, boundary, and error cases
</content>
</entry>
<entry>
<title>feat(buffer): add EWW and email viewing functions</title>
<updated>2026-02-04T11:40:57+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-04T11:40:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=9ba245972d463c2bd226b39f9fbffbc8c24eb74c'/>
<id>urn:sha1:9ba245972d463c2bd226b39f9fbffbc8c24eb74c</id>
<content type='text'>
- cj/view-buffer-in-eww (C-; b w): render HTML files in EWW
- cj/view-email-in-buffer (C-; b e): parse MIME and render .eml files
- Add forward declarations for mm-decode functions
- Fix wide docstring in cj/diff-buffer-with-file
</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.git/commit/?id=42a649d38043dfe5aee15e3fc2d6dcce4483cd40'/>
<id>urn:sha1:42a649d38043dfe5aee15e3fc2d6dcce4483cd40</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.

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

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat:buffer-diff: Add syntax-aware buffer diffing with difftastic</title>
<updated>2025-11-09T21:31:41+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-09T21:31:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=e3fda13930b46820f2cbdf29b33d9ef3c99fea7f'/>
<id>urn:sha1:e3fda13930b46820f2cbdf29b33d9ef3c99fea7f</id>
<content type='text'>
Introduce enhanced buffer comparison with saved file using difftastic
for syntax-aware diffing, with a fallback to regular unified diff if
difftastic is unavailable. Output is displayed in separate buffers,
leveraging ansi-color for improved readability. Also includes
comprehensive integration tests covering the diff workflow, handling
cases like added, removed, and modified lines, and ensuring graceful
handling of special cases and errors.
</content>
</entry>
<entry>
<title>feat: Upgrade diff-buffer-with-file to ediff and add difftastic for git</title>
<updated>2025-11-03T22:10:13+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-03T22:10:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=aea61b34693f164ced731cf3b0f0e8ee798c342c'/>
<id>urn:sha1:aea61b34693f164ced731cf3b0f0e8ee798c342c</id>
<content type='text'>
Two improvements for better diff experience:

1. **Upgraded cj/diff-buffer-with-file to use ediff** (custom-buffer-file.el)
   - Replaced basic unified diff with ediff-current-file
   - Now uses existing ediff config (horizontal split, j/k navigation)
   - C-; b D now launches interactive ediff instead of text diff
   - Simplified from 17 lines to 5 lines
   - Removed TODO comment about difftastic integration

2. **Added difftastic for git diffs** (vc-config.el)
   - Installed binary: difftastic 0.64.0 via pacman
   - Added difftastic.el package integrated with magit
   - Keybindings in magit-diff:
     - D → difftastic-magit-diff (dwim)
     - S → difftastic-magit-show
   - Provides structural, language-aware diffs for git changes
   - Better visualization of code structure changes

**Result:**
- Buffer vs file: Interactive ediff (can navigate, merge, revert)
- Git history: Structural difftastic (language-aware visualization)
- Right tool for each job

Serves Method 3: "Make Fixing Emacs Frictionless"
- Better diffs = easier debugging and code review

Updated todo.org: Method 1 progress 7/13 (was 5/13)

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

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: Swap print keybinding and add confirmation prompt</title>
<updated>2025-11-03T19:29:56+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-03T19:29:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=6534147e502f3f1d504b8d2d9757aefa04bfbb07'/>
<id>urn:sha1:6534147e502f3f1d504b8d2d9757aefa04bfbb07</id>
<content type='text'>
Print operations are now safer and more intuitive:

Keybinding changes:
- C-; b p → copy file path (safe, common action)
- C-; b P → print to PostScript (dramatic, requires shift)

Print function improvements:
- Add y-or-n-p confirmation before printing
- C-u prefix skips confirmation and enables color printing
- Prevents accidental waste of paper/toner

Serves V2MOM Values:
- Intuitive: Dramatic actions require shift key
- Intuitive: Prevents muscle memory mistakes
- Simple: Reliability through confirmation

Also updated docs/NOTES.org with Makefile availability note.

Closes inbox items from emacs-inbox-zero session (2025-11-03).

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

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: Add copy-to-top and copy-to-bottom buffer methods with tests</title>
<updated>2025-11-03T18:58:50+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2025-11-03T18:58:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/dotemacs.git/commit/?id=bc2128e2e22cb26f4e48124f3d76283fed2071d4'/>
<id>urn:sha1:bc2128e2e22cb26f4e48124f3d76283fed2071d4</id>
<content type='text'>
Add two new methods to copy buffer content regions:
- cj/copy-to-bottom-of-buffer: copies from point to end of buffer
- cj/copy-to-top-of-buffer: copies from beginning of buffer to point

Reorganize copy operations under C-; b c submenu:
- C-; b c w: copy whole buffer
- C-; b c t: copy to top (beginning to point)
- C-; b c b: copy to bottom (point to end)

Other copy operations (buffer name, file path, file link) remain at
C-; b base level for quick access.

Add comprehensive ERT tests (22 tests total):
- test-custom-buffer-file-copy-to-bottom-of-buffer.el (11 tests)
- test-custom-buffer-file-copy-to-top-of-buffer.el (11 tests)
- Tests cover normal, boundary, and error cases including unicode,
  narrowing, whitespace, and read-only buffers

All tests pass.

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

Co-Authored-By: Claude &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
