summaryrefslogtreecommitdiff
path: root/modules/org-refile-config.el
AgeCommit message (Collapse)Author
2025-11-16refactor: Use cj/log-silently for debug messagesCraig Jennings
Converted debug/informational messages to use cj/log-silently instead of message across multiple modules. These are automatic initialization or background task messages that don't need minibuffer display but should still be logged to *Messages* buffer. Changes: - org-agenda-config.el: Cache build/hit messages (4 messages) - org-refile-config.el: Cache build/hit + mode switching (5 messages) - org-export-config.el: reveal.js download message (1 message) - auth-config.el: oauth2-auto cache fix message (1 message) - quick-video-capture.el: initialization message (1 message) All modules now require system-lib for cj/log-silently function. Keeps UI clean while maintaining debuggability. 🤖 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-10-12changing repositoriesCraig Jennings