| Age | Commit message (Collapse) | Author |
|
Fixed mbsync IMAP APPEND errors caused by 8 non-email files (PDFs and
PNGs) in maildir folders. Removed corrupted files to recovery directory
for user review. Successfully verified fix with clean mbsync run.
Third occurrence of this pattern - may need investigation into attachment
handling or file operations targeting maildir.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Changed from merge strategy to rebase strategy when pulling updates
in the multi-repo reconciliation workflow. This avoids creating
unnecessary merge commits and maintains linear history.
Changes:
- Line 54: git pull --quiet β git pull --rebase --quiet (clean repos)
- Line 64: git pull --quiet β git pull --rebase --quiet (dirty repos)
Benefits:
- Cleaner git history (no merge commits for simple pulls)
- Consistent with best practices for personal development
- Aligns with git pull --rebase --autostash used elsewhere
The workflow still maintains its error handling and Magit integration
for conflict resolution.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Consolidated cj/log-silently function to system-lib.el as the canonical
location for low-level utility functions. This fixes 4 failing tests in
video-audio-recording that couldn't find the function.
Changes:
- Move cj/log-silently to system-lib.el (from system-utils.el)
- Remove duplicate definition from org-agenda-config-debug.el
- Remove duplicate definition from system-utils.el
- Add (require 'system-lib) to all modules using cj/log-silently:
- video-audio-recording.el
- org-agenda-config-debug.el
- media-utils.el (also removed declare-function)
- elfeed-config.el (replaced system-utils with system-lib)
- wrap-up.el
Test Results:
- Before: 112/113 passing (4 video-audio-recording tests failing)
- After: 113/113 passing β
All tests now pass with zero failures.
Fixes TODO #809-895 (move cj/log-silently to system-lib.el)
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
The test expected 'primary-click' but the actual configuration maps
dashboard-mode to 'scroll+primary' (mousetrap-mode.el line 69).
Updated test to expect 'scroll+primary' to match current config.
Before: Test expected primary-click (outdated)
After: Test expects scroll+primary (matches config)
All 11 mousetrap profile tests now passing.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Major improvements to test output clarity and failure diagnostics:
Output Improvements:
- Clean aligned output showing test file + pass/fail status
- Show test count for passing files: "β (11 tests)"
- Clear "β FAILED" marker for failures (no verbose noise)
- Suppress passing test details (reduces output by ~95%)
Failure Summary:
- Clear visual separator box for failures
- List all failed files with bullet points
- Show specific failed test names with line numbers
- Provide copy-paste commands to re-run failures
Technical Changes:
- Capture test output and only display on failure
- Extract test count from ERT output for passing tests
- Save failure details to temp files for summary
- Apply same improvements to both unit and integration tests
Benefits:
- Instantly see which tests failed (no scrolling)
- Know exactly which test names failed
- Get line numbers for debugging
- Copy-paste commands to re-run specific failures
- Dramatically reduced output verbosity
Example summary:
Failed test files:
β’ test-mousetrap-mode--get-profile-for-mode.el
Errors:
FAILED test-foo (line 15)
Run individual failing tests with:
make test-file FILE=test-mousetrap-mode--get-profile-for-mode.el
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Major improvements to music player configuration:
Backend Changes:
- Switch from emms-player-mpd to emms-player-mpv
- Remove MPD daemon dependency (no service management required)
- Configure MPV with --quiet, --no-video, --audio-display flags
- Support both local files and streaming URLs (http/https/mms)
Keybinding Enhancements:
- Add C-; m n β next track
- Add C-; m p β previous track
- Add C-; m g β go to playlist
- In playlist: n/P for next/prev, f/b for seek forward/backward
- Update which-key descriptions
Code Quality:
- Use music-dir constant from user-constants.el (not hardcoded path)
- Add (require 'user-constants) for proper dependency
- Update commentary to reflect MPV backend
Test Fixes:
- Fix 8 failing append-track tests
- Update test mock data to use cj/music-root for portability
- All 104 music-config tests now passing
Benefits:
- No daemon to start/stop/manage
- Simpler architecture (one process vs MPD+EMMS)
- Streaming radio URLs work out of the box
- Better path consistency across codebase
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Rename "pD" to "pdx" for ~/projects/documents/
- Rename "pd" to "pdl" for ~/projects/danneel/
Uses consistent naming: pdx (documents), pdl (danneel), pl (elibrary),
pf (finances), pjr (jr-estate).
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add "db" shortcut for ~/documents/dropbox/
- Update "lx" path from ~/lectures/ to ~/archive/lectures/
- Rename "sv" to "spv" and update path to ~/sync/phone/videos/
- Fix "tg" path to use org-dir instead of sync-dir
All shortcuts now point to existing directories.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add single-key navigation (e, c, a, b, f, r, i, t, d) for all dashboard items
- Add new navigator buttons: Code (projects), Agenda, Terminal
- Reorganize buttons into two balanced rows (5 top, 4 bottom)
- Remove bracket decoration around buttons for cleaner look
- Add proper spacing between buttons for better readability
- Rename labels: "Feeds" β "RSS/Feeds", "Files" β "Directory/Files"
- Disable package count and startup time display
- Disable 'q' keybinding to prevent accidental dashboard quit
Navigator buttons now include:
Row 1: Code, Email, Agenda, Flashcards, Books
Row 2: RSS/Feeds, IRC, Terminal, Directory/Files
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Change mode-line-right-align-edge from 'right-margin to 'window.
This fixes an issue where centered text modes (nov-mode for EPUBs, etc.)
with wide buffer margins would cause the right-aligned modeline elements
(VC branch, weather, etc.) to have large gaps on the right side.
Now the modeline always aligns to the window edge regardless of buffer
margin settings.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- 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 <noreply@anthropic.com>
|
|
Updated minibuffer and command history from recent session.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Add missing scratch-greet variable definition
- Set scratch buffer font height to 16pt for better readability
- Fix buffer targeting using with-current-buffer for reliability
- Simplify scratch greeting message
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Reduce variable-pitch font from 1.8x to 1.0x for normal reading size
- Add configurable margin percentage (cj/nov-margin-percent, default 25%)
- Calculate text width dynamically based on window size and margins
- Text now uses 50% of window width with 25% margins on each side
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
|
|
|
|
Phone calls were not capturing the remote person's voice due to severe
volume loss (44 dB) when using the amerge+pan FFmpeg filter combination.
Changes:
- Replace amerge+pan with amix filter (provides 44 dB volume improvement)
- Increase default system volume from 0.5 to 2.0 for better capture levels
- Add diagnostic tool to show active audio playback (C-; r w)
- Add integration test with real voice recording
- Fix batch mode compatibility for test execution
The amix filter properly mixes microphone and system monitor inputs without
the massive volume loss that amerge+pan caused. Verified with automated
integration test showing perfect transcription of test audio.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- dashboard-config.el: Change "Ebooks" to "Books" label
- weather-config.el: Fix variable name to wttrin-favorite-location
- todo.org: Add music player and mousetrap investigation tasks
- history: Update command history
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
This reverts commit 9d55ed149e100b4fb3ef6f5a79d263dcb26ce835.
|
|
|
|
The cursor color was not updating correctly when switching buffers
or modifying files. The original implementation used window-buffer-change
and other specific hooks, but these were insufficient and internal
buffers were interfering with cursor color updates.
Root cause:
- Cursor color is global (one cursor for all of Emacs)
- Previous hooks fired in internal buffer contexts (*Echo Area*, *temp*)
- This caused cursor to be set to white (unmodified) even when in
read-only buffers like dashboard
Solution:
- Use post-command-hook which runs after every command in current buffer
- Ignore internal buffers (names starting with space)
- Cache optimization prevents redundant set-cursor-color calls
Behavior now:
- Dashboard (read-only): Red cursor
- Unmodified file: White cursor
- Modified file: Green cursor
- After save: White cursor
Tests:
- Added 9 integration tests in test-ui-cursor-color-integration.el
- Tests verify hook installation, buffer switching, modification tracking
- All 27 tests passing (18 unit + 9 integration)
Integration tests catch issues that unit tests miss:
- Unit tests verified state detection logic (β)
- Integration tests verify hooks fire at right times (β now)
- Integration tests verify real buffer switching behavior (β now)
Cleanup:
- Removed debug code from init.el
- Removed debug-cursor-color.el temporary file
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Change modeline filename and cursor colors to indicate buffer
modification status, not just read-only/overwrite state.
Color scheme changes:
- White (#ffffff): Unmodified writeable buffer
- Green (#64aa0f): Modified writeable buffer (unsaved changes)
- Red (#f06a3f): Read-only buffer
- Gold (#c48702): Overwrite mode active
Previously: All writeable buffers were green regardless of modification
Now: White when clean, green when dirty (better visual feedback)
Implementation:
- Updated cj/buffer-status-colors in user-constants.el:
- Changed 'normal' β 'unmodified' (white)
- Added new 'modified' state (green)
- Updated state detection in modeline-config.el:
- Now checks (buffer-modified-p) before defaulting to unmodified
- Updated cursor color logic in ui-config.el:
- Same state detection as modeline for consistency
- Added after-change-functions hook for real-time updates
- Added after-save-hook to update on save
Priority order (highest to lowest):
1. Read-only (red) - takes precedence over everything
2. Overwrite mode (gold) - takes precedence over modified state
3. Modified (green) - buffer has unsaved changes
4. Unmodified (white) - default for clean writeable buffers
Tests:
- 18 comprehensive tests in test-ui-buffer-status-colors.el
- Tests state detection logic and priority order
- Tests color constant definitions and mappings
- Tests integration with cursor and modeline
- All tests passing
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
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 <noreply@anthropic.com>
|
|
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 <noreply@anthropic.com>
|
|
Changed cj/music--append-track-to-m3u-file to convert absolute paths
to relative paths from cj/music-root before writing to M3U files.
This fixes playlist loading in Mopidy, which expects relative paths
in M3U files based on the configured base_dir.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Font changes:
- Set Berkeley Mono + Lexend as default fonts
- Updated EBook preset to use Lexend
- Created FiraCode preset preserving old defaults
- Installed new fonts: Charis SIL, Bitstream Vera, Literata, Lexend
Org-drill changes:
- Removed fontaine-dependent font switching code
- Now uses org-drill's built-in display management
- Configured 24-point font, variable-pitch, hidden modeline
- Added comprehensive tests for display management (10 tests, all passing)
org-drill now loads from local ~/code/org-drill for development.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Changed default fontaine preset to use Berkeley Mono for fixed-pitch
and Lexend for variable-pitch reading. Lexend is specifically designed
to improve reading fluency and reduce visual stress for long-form reading.
Changes:
- Default preset: Berkeley Mono + Lexend
- New FiraCode preset: Preserves old defaults (FiraCode + Merriweather)
- New BerkeleyMono preset: Berkeley Mono + Charis SIL
- Installed fonts: Charis SIL, Bitstream Vera, Literata, Lexend
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Created detailed specification for test reporting system that will:
- Parse ERT batch output and generate test summaries
- Show total tests, passed, failed, duration
- List individual test failures with details
- Enable incremental improvement via TDD
Key Design Decisions:
- Language: Emacs Lisp (dogfooding, no dependencies, better integration)
- Architecture: Collect β Parse β Report
- Integration: Makefile + test-runner.el
- Test isolation: Clear tests on project switch
Implementation Phases:
- Phase 1: Basic stats (tests, passed, failed, duration)
- Phase 2: Failure details (messages, rerun commands)
- Phase 3: Rich details (timing, slowest tests, assertions)
Cross-Project Test Isolation:
- Problem: ERT tests globally registered across all projects
- Solution: Clear tests on project switch + project-aware commands
- Hybrid approach combining automatic and manual control
Integration Points:
- Makefile: Pipe output to test-reporter script
- test-runner.el: Post-run hooks or result wrapping
- ERT: Custom reporter (future enhancement)
Test-Driven Development:
- Parser tested with real ERT output samples
- Fixtures for edge cases
- Incremental improvement as new formats encountered
This is marked as NEXT PRIORITY TASK.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Replaced colored output with plain text symbols for better portability:
- Removed all COLOR_* variable definitions
- Replaced color-wrapped text with plain text
- Added simple text markers:
- [i] for informational messages
- [!] for warnings
- β for success (kept from before)
- β for errors (kept from before)
- β for warnings (kept from before)
Benefits:
- Works in all terminals and CI environments
- No escape code littering when piped or logged
- Simpler, more maintainable code
- Cleaner output that's easier to read
Changes: 40 insertions, 45 deletions
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
This squash merge combines 4 commits from the performance branch:
## Performance Improvements
- **org-agenda cache**: Cache org-agenda file list to reduce rebuild time
- Eliminates redundant file system scans on each agenda view
- Added tests for cache invalidation and updates
- **org-refile cache**: Optimize org-refile target building (15-20s β instant)
- Cache eliminates bottleneck when capturing tasks
## Test Suite Improvements
- Fixed all 18 failing tests β 0 failures (107 test files passing)
- Deleted 9 orphaned test files (filesystem lib, dwim-shell-security, org-gcal-mock)
- Fixed missing dependencies (cj/custom-keymap, user-constants)
- Fixed duplicate test definitions and wrong variable names
- Adjusted benchmark timing thresholds for environment variance
- Added comprehensive tests for org-agenda cache functionality
## Documentation & Organization
- **todo.org recovery**: Restored 1,176 lines lost in truncation
- Recovered Methods 4, 5, 6 + Resolved + Inbox sections
- Removed 3 duplicate TODO entries
- **Inbox zero**: Triaged 12 inbox items β 0 items
- Completed: 3 tasks marked DONE (tests, transcription)
- Relocated: 4 tasks to appropriate V2MOM Methods
- Deleted: 4 duplicates/vague tasks
- Merged: 1 task as subtask
## Files Changed
- 58 files changed, 29,316 insertions(+), 2,104 deletions(-)
- Tests: All 107 test files passing
- Codebase: Cleaner, better organized, fully tested
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Implemented comprehensive caching solution for org-refile targets that
eliminates repeated filesystem scans (34,649 files) on every refile operation.
Performance Impact:
- Before: 15-20 seconds per refile Γ 12+/day = 3-4 minutes daily
- After: Instant (<50ms) via cache, async build in background
- Daily time saved: ~3-4 minutes + eliminated 12+ context switches
Root Cause:
- cj/build-org-refile-targets scanned all files in 3 directories:
* ~/.emacs.d (11,995 files)
* ~/code (18,695 files)
* ~/projects (3,959 files)
- Called on EVERY refile via cj/org-refile
- directory-files-recursively is expensive with deep hierarchies
Solution Implemented:
1. Cache layer with 1-hour TTL
- First call: builds and caches targets (one-time cost)
- Subsequent calls: use cache (instant)
- Auto-refresh after 1 hour or Emacs restart
2. Async cache building
- Runs 5 seconds after Emacs idle (non-blocking)
- Zero startup impact
- Cache ready before first use in typical workflow
3. Manual refresh available
- M-x cj/org-refile-refresh-targets
- Use after adding new projects/todo.org files
- Force rebuild bypasses cache
4. Robust error handling
- Building flag prevents concurrent builds
- unwind-protect ensures flag always clears
- Graceful handling if user refiles before async build completes
Changes:
- modules/org-refile-config.el:
* Added cache variables with TTL support
* Modified cj/build-org-refile-targets for caching
* Added cj/org-refile-refresh-targets for manual refresh
* Async build via run-with-idle-timer
* Enhanced commentary documenting performance
- tests/test-org-refile-build-targets.el (NEW):
* 9 comprehensive ERT tests
* Coverage: normal, boundary, error cases
* Tests cache logic, TTL, force rebuild, async flag
* All tests pass, zero regressions
Test Results:
- 9/9 new tests passing
- 1,814 existing tests still passing
- Zero regressions introduced
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Integrates a modeline indicator to display active recording status
in Emacs. The indicator shows "π΄Audio", "π΄Video", or "π΄A+V" based
on the active recording processes. Includes functions for starting
and stopping audio/video recordings, with sentinel processes
ensuring timely updates to the modeline. Also adds extensive
integration tests to validate modeline synchronization.
|
|
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.
|
|
Introduce `cj/git-clone-clipboard-url` function for quick cloning of
git repositories using a URL from the clipboard. Allows for
directory selection using prefix arguments and opens the README file
post-cloning if available. Adjust keymaps to include the new
function and refine version control menu organization.
|
|
Added display customization for org-drill cards, including larger
text and proportional font. Adjusted session limits to 100 cards and
30 minutes. Integrated a hook to apply these changes during drill
sessions. Updated org-drill package configuration to use the newest
revision from the main branch.
|
|
Fixed oauth2-auto.el caching bug using Emacs advice system (survives updates).
Root Cause:
- oauth2-auto version 20250624.1919 has `or nil` on line 206
- This completely disables the internal hash-table cache
- Every org-gcal sync requires decrypting oauth2-auto.plist from disk
- GPG passphrase prompted every ~15 minutes (violated "Frictionless" value)
The Fix (via advice):
- Created cj/oauth2-auto--plstore-read-fixed with cache enabled
- Applied as :override advice to oauth2-auto--plstore-read
- Survives package updates (unlike direct modification)
- Can be easily removed if upstream fixes the bug
Changes:
- modules/auth-config.el:
* Added cj/oauth2-auto--plstore-read-fixed (lines 75-93)
* Applied advice on package load (lines 96-98)
* Added cj/clear-oauth2-auto-cache helper
* Documented fix in commentary (lines 16-22)
- todo.org: Mark #A priority task as DONE
- docs/oauth2-auto-cache-fix.md: Detailed documentation
Result:
- Passphrase prompted ONCE per Emacs session (on cold start)
- Subsequent org-gcal syncs use cached tokens (no prompts)
- Workflow now frictionless as intended
- Fix persists across package updates
Upstream:
- Bug acknowledged in code: "Assume cache is invalidated. FIXME"
- Should report to: https://github.com/rhaps0dy/emacs-oauth2-auto
- Simple fix: Remove `or nil` on line 206
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Expanded chime modeline settings for better event visibility:
- Lookahead window: 3 hours β 6 hours
- Tooltip max events: 10 β 20
- Tooltip lookahead: 6 days β 7 days (full week)
Provides more advance notice of upcoming events and better weekly overview.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
|
|
Disabled benchmarks for learning and tokenizing 10,000 words due to
prolonged execution times (minutes instead of seconds). Added
`:slow` tag to indicate need for performance optimization before
re-enabling.
|
|
Demand wttrin loading for immediate mode-line initialization at
startup. Switch to setopt for customizable variables and simplify
mode activation logic. Remove explicit autoload and use-package
xterm-color as a dependency. Adjust refresh interval and update
default locations list.
|
|
Update the test commands to skip tests tagged with :slow during
batch execution, improving testing efficiency.
|
|
Set the calendar URL in chime configuration for better integration
with Google Calendar. Debug mode remains available but disabled by
default.
|
|
Disable the use-package for popper and comment out the *Messages*
buffer in the popper-reference-buffers list to prevent popper from
managing it.
|
|
Introduce new section in 'quality-engineer.org' detailing how to
refactor code to enhance testability. Emphasizes recognizing deep
nesting, long functions, and overmocking as refactoring signals.
Provides strategies such as extracting functions and clear
separation of concerns. Offers real-world examples and guidelines on
effective mocking to maintain tests that are resilient to
implementation changes. Enhanced content in 'coder.org' with deeper
insights into handling deep nesting scenarios.
|
|
Introduce a new `system-lib.el` module providing low-level system
utility functions, including function `cj/executable-exists-p` to
check for the availability of programs in PATH. Integrate this
library in `init.el`.
test(system): Add unit tests for executable check function
Create comprehensive unit tests for `cj/executable-exists-p` in
`system-lib.el`, ensuring coverage of normal, boundary and error
scenarios.
|
|
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.
|
|
Performance improvement and new feature with full test coverage.
## Changes
### 1. Fix modeline line/column position lag (#A priority)
- Replace expensive line-number-at-pos with cached %l/%c format specifiers
- Enable line-number-mode explicitly for caching
- Result: Instant modeline updates, zero performance overhead
- Files: modules/modeline-config.el:81-83, modules/ui-config.el:53
### 2. Implement multi-level org sorting
- New function: cj/org-sort-by-todo-and-priority
- Sorts by TODO status (TODO before DONE) AND priority (AβBβCβD)
- Uses stable sorting: priority first, then TODO state
- Gracefully handles empty sections (no error)
- Bound to C-; o o (ordering β org sort)
- Files: modules/org-config.el:278-299, modules/custom-ordering.el:253,267
### 3. Comprehensive ERT test suite (12/12 passing)
- Normal cases: Mixed TODO/DONE, multiple of same type, same priority
- Boundary cases: Empty sections, single entries, no priorities
- Error cases: Non-org-mode buffer
- Test file: tests/test-org-sort-by-todo-and-priority.el
### 4. Testing improvements discovered
- Disable org-mode hooks to avoid package dependencies in batch mode
- org-sort-entries must be called from parent heading
- Preserve priority cookie in org-get-heading (t t nil t)
- Add condition-case to handle "Nothing to sort" gracefully
### 5. Minor cleanup
- Comment out chime-debug setting (org-agenda-config.el:267)
- Mark modeline lag task as DONE in todo.org
## Technical Details
Modeline optimization:
- line-number-at-pos is O(n) where n = current line
- %l and %c are O(1) lookups from cached values
Org sorting algorithm uses stable sort:
1. Sort by priority (A, B, C, D, unprioritized)
2. Sort by TODO status (preserves priority order within groups)
Result: TODO [#A], TODO [#B], DONE [#A], DONE [#B], etc.
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Two Method 1 quick wins shipped:
1. Fixed cj/flyspell-then-abbrev keybinding in org-mode
- Autoload cookies were comments and never executed
- Added explicit keybinding setup when module loads
- Override org-mode's C-' binding (org-cycle-agenda-files)
- Both C-' and C-c f now work in all buffers
2. Fixed mu4e sent folder not syncing (cmail account)
- Root cause: mbsync aborted on Drafts errors before Sent
- Changed ~/.mbsyncrc to explicit channels (like Gmail)
- Synced 136 missing sent messages (May-Nov 7)
- Now syncs 6 folders independently
Files modified:
- modules/flyspell-and-abbrev.el: Fixed keybindings (lines 235-251)
- todo.org: Marked 2 tasks complete with documentation
π€ Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
- Commented out mu4e-update-interval to stop email password prompts
- Triaged 5 inbox items against V2MOM framework
- Moved 4 items to Method 1 (frictionless improvements)
- Split org keymaps task into Method 1 + someday-maybe components
- Deleted unclear 'toggle org-agenda' task
- Clarified org-appear toggle requirement for long links in tables
- Updated Method 1 count from [8/14] to [8/18]
- Added transient menu task to SOMEDAY-MAYBE
- Cleared inbox for new items
Co-Authored-By: Claude <noreply@anthropic.com>
|