summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-11-15refactor(dirvish): Rename project shortcuts for consistencyCraig Jennings
- 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>
2025-11-15feat(dirvish): Add dropbox shortcut and fix directory pathsCraig Jennings
- 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>
2025-11-15feat(dashboard): Comprehensive dashboard navigation improvementsCraig Jennings
- 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>
2025-11-15fix(modeline): Align to window edge instead of buffer marginCraig Jennings
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>
2025-11-15fix(mousetrap): Fix dashboard click/scroll blocking issueCraig Jennings
- 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>
2025-11-15chore: Update Emacs historyCraig Jennings
Updated minibuffer and command history from recent session. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-15feat(scratch): Set scratch buffer font to 16pt and fix missing variableCraig Jennings
- 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>
2025-11-15feat(epub): Improve nov reader typography and layoutCraig Jennings
- 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>
2025-11-14test: Add integration test for recording monitor captureCraig Jennings
2025-11-14chore: updated tasksCraig Jennings
2025-11-14fix(recording): Fix phone call audio capture with amix filterCraig Jennings
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>
2025-11-14fix: Reapply dashboard, weather config fixes and todo updatesCraig Jennings
- 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>
2025-11-14Revert "checking in modified/removed tests and other misc changes"Craig Jennings
This reverts commit 9d55ed149e100b4fb3ef6f5a79d263dcb26ce835.
2025-11-14checking in modified/removed tests and other misc changesCraig Jennings
2025-11-14fix(ui): Fix cursor color updates with post-command-hookCraig Jennings
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>
2025-11-14feat(ui): Add buffer modification state to color indicatorsCraig Jennings
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>
2025-11-14feat(mousetrap): Add profile-based architecture and clickable lighterCraig Jennings
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>
2025-11-13feat(mousetrap): Add configurable mouse wheel scrollingCraig Jennings
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>
2025-11-12fix: Write relative paths to M3U playlists instead of absoluteCraig Jennings
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>
2025-11-12feat(fonts): Update fonts to Berkeley Mono + Lexend, simplify org-drill configCraig Jennings
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>
2025-11-12chore: Update history fileCraig Jennings
πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12feat(fonts): Update default fonts to Berkeley Mono + LexendCraig Jennings
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>
2025-11-12docs: Add comprehensive test-reporter specificationCraig Jennings
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>
2025-11-12refactor: Remove ANSI color codes from MakefileCraig Jennings
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>
2025-11-12perf: Merge performance branch - org-agenda cache, tests, and inbox zeroCraig Jennings
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>
2025-11-11perf: Optimize org-refile with caching to eliminate 15-20s delayCraig Jennings
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>
2025-11-11a/v recording: fix setup, add test functionality and indicatorlkgCraig Jennings
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.
2025-11-11chrono-tools: integrate and test time-zones packageCraig Jennings
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.
2025-11-11vc-config: add git clone from clipboard URL featureCraig Jennings
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.
2025-11-11org-drill-config: enhance org-drill display settingsCraig Jennings
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.
2025-11-11fix: Resolve Google Calendar password prompts via adviceCraig Jennings
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>
2025-11-10config: Increase chime modeline lookahead and tooltip displayCraig Jennings
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>
2025-11-09updating tasksCraig Jennings
2025-11-09test: Add slow tag to benchmarks taking too longCraig Jennings
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.
2025-11-09refactor:weather-config: streamline wttrin configurationCraig Jennings
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.
2025-11-09test: Exclude slow tests from batch executionsCraig Jennings
Update the test commands to skip tests tagged with :slow during batch execution, improving testing efficiency.
2025-11-09feat:chime: Add calendar URL configurationCraig Jennings
Set the calendar URL in chime configuration for better integration with Google Calendar. Debug mode remains available but disabled by default.
2025-11-09chore:popper-config: disable popper and comment out MessagesCraig Jennings
Disable the use-package for popper and comment out the *Messages* buffer in the popper-reference-buffers list to prevent popper from managing it.
2025-11-09doc:ai-prompts: Add guide on refactoring for testabilityCraig Jennings
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.
2025-11-09feat:system: Add system utility library with executable checkCraig Jennings
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.
2025-11-09feat:buffer-diff: Add syntax-aware buffer diffing with difftasticCraig Jennings
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.
2025-11-08feat: Fix modeline lag and add org multi-level sort with comprehensive testsCraig Jennings
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>
2025-11-08fix: Resolve flyspell keybinding and mu4e sent folder sync issuesCraig Jennings
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>
2025-11-07chore: Disable automatic syncs and triage inboxCraig Jennings
- 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>
2025-11-06chore: Update abbrev corrections and add flyspell TODOCraig Jennings
- Automatic abbrev_defs updates from spell corrections - Added TODO: investigate flyspell-then-abbrev keybinding loss in scratch πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06feat: Add comprehensive authentication cache reset utilityCraig Jennings
Added cj/reset-auth-cache function to recover from incorrect password entry for encrypted files like authinfo.gpg. Resolves "Bad session key" and "Decryption failed" errors. Key features: - Smart cache clearing: preserves 400-day GPG/SSH cache by default - Optional prefix arg (C-u) to also clear gpg-agent cache - Clears auth-source, EPA file handler, and optionally gpg-agent caches - Bound to C-; A for easy access (removed from debug menu C-c d) Also added cj/kill-gpg-agent for aggressive agent reset when needed. Consolidates and replaces simpler auth-source-only version that was previously in config-utilities.el. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06feat: Add high-priority task for Google Calendar password promptsCraig Jennings
Added comprehensive TODO to Method 1 (priority A) to fix the irritating issue where gcal-sync triggers password prompts every 15 minutes, interrupting workflow and breaking concentration. Task includes: - Current setup documentation (GPG agent, plstore, auth-source config) - Problem analysis (plstore cache, oauth2-auto token refresh) - Six investigation paths to try - File references for debugging - V2MOM alignment (violates "Frictionless" value) This is a daily irritant that needs fixing - password prompts every 15 minutes during calendar sync defeat the purpose of having 400-day GPG cache configured. Related files: - modules/auth-config.el (plstore and GPG configuration) - modules/org-gcal-config.el (org-gcal and oauth2-auto setup) - ~/.gnupg/gpg-agent.conf (GPG agent cache settings) πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06chore: Move gemini.key.gpg to assets folderCraig Jennings
Relocated gemini.key.gpg to assets/ folder for better organization. No code references found in modules directory, so no updates needed. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06chore: Move config-dependencies.org to docs folderCraig Jennings
Moved config-dependencies.org to docs/ folder to keep it private along with other documentation. The file remains on disk but is now gitignored. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-06chore: Remove issues.orgCraig Jennings
Deleted issues.org file from repository. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>