| Age | Commit message (Collapse) | Author |
|
Change keybindings for counting words and characters to "# w" and "#
c" to improve mnemonic efficiency. Update the corresponding
which-key descriptions accordingly.
|
|
Add 'turn-on-gnus-dired-mode' to 'dired-mode-hook' to facilitate
marking files in Dirvish for attachment in mu4e emails.
|
|
Added new keybindings for marking the whole buffer and reverting the
buffer. Updated the descriptions to reflect these additions.
|
|
Introduce functions to count characters in a buffer or region. Bind
new character counting function to "C-; C" in custom keymap.
|
|
|
|
|
|
|
|
Introduce detailed session handoff documents for Craig's Emacs
configuration project. These provide strategic clarity using the
V2MOM framework and outline current progress, project goals,
recommended actions, and key insights. This addition aims to
streamline handovers and ensure continuity between sessions,
facilitating a systematic approach to addressing identified
challenges and opportunities for improvement.
|
|
This commit fixes timing issues with chime.el startup and simplifies
configuration after chime.el's validation improvements.
## Changes
**1. Fixed org-agenda lazy loading issue**
- Added `:demand t` to org-agenda use-package
- Ensures org-agenda loads before chime tries to use it
- Prevents "org-agenda not available" errors
**2. Cleaned up duplicate rebuild hooks**
- Removed duplicate emacs-startup-hook with idle-timer
- Kept single emacs-startup-hook for rebuild
- Simpler, more maintainable configuration
**3. Simplified chime configuration**
- Restored `(chime-mode 1)` in use-package :config
- Removed conditional fboundp check (no longer needed)
- Works with chime.el's new deferred validation
- Fixed `:after` clause (removed org-agenda dependency)
**4. Fixed formatting issues**
- Removed stray 's' character in add-hook indentation
- Consistent indentation throughout
## Integration with chime.el v0.6.0
This commit pairs with chime.el's new features:
- chime-startup-delay (default 10 sec) gives rebuild hook time to run
- Validation moved to first check (no startup blocking)
- Clean user experience with no false warnings
## Timeline
```
Time 0s: Emacs starts
Time 0s: org-agenda loads (:demand t)
Time 0s: chime-mode 1 (starts timer, no validation)
Time 0.1s: emacs-startup-hook → rebuild org-agenda-files
Time 10s: First chime-check → validates, finds events
Time 24s: Modeline populated with events
```
**Result:** 24 second startup (vs previous 463 seconds - 95% improvement)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
The previous commit incorrectly moved deadgrep to 'D', which conflicts
with the important dired-do-delete command (immediate delete of marked
files). This commit moves deadgrep to 'G' instead.
## Changes
**prog-general.el:**
- Move cj/deadgrep-here from 'D' to 'G' (was dired-do-chgrp, rarely used)
**dirvish-config.el:**
- Updated Commentary to document both 'D' and 'G' keybindings
- 'D' remains dired-do-delete (standard dired immediate delete)
- 'G' is now deadgrep search
## Final Keybinding Map
| Key | Binding | Purpose |
|-----|-------------------------------|--------------------------------|
| d | cj/dirvish-duplicate-file | Duplicate with "-copy" suffix |
| D | dired-do-delete | Delete marked files (standard) |
| g | dirvish-quick-access | Quick directory menu |
| G | cj/deadgrep-here | Search with deadgrep |
Capital G is mnemonic for "Grep" and doesn't conflict with important
dired commands. dired-do-chgrp is rarely used and not a loss.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
This commit adds a convenient file duplication function to dirvish and
reorganizes keybindings to avoid conflicts.
## Changes
**1. New function: cj/dirvish-duplicate-file (dirvish-config.el:150)**
Duplicates the file at point with "-copy" suffix before the extension:
- report.pdf → report-copy.pdf
- script.el → script-copy.el
- README → README-copy
Features:
- Prevents duplicating directories (files only)
- Checks if target exists and prompts to overwrite
- Refreshes buffer automatically after copying
- Shows clear message with old and new names
**2. Keybinding changes**
dirvish-config.el:
- Bound 'd' to cj/dirvish-duplicate-file (was dired-flag-file-deletion)
- Updated Commentary section to document new binding
prog-general.el:
- Moved cj/deadgrep-here from 'd' to 'D' (capital D)
- More mnemonic: D for Deadgrep
- Avoids conflict with new duplicate function
## Rationale
The 'd' key is prime real estate in file managers, and duplicating files
is a very common operation. The standard dired-flag-file-deletion is still
available via 'x' or the mark-and-delete workflow.
Deadgrep on 'D' is more discoverable (capital D for Deadgrep) and less
likely to be pressed accidentally.
## Usage
In dirvish, navigate to a file and press:
- 'd' - Duplicate file with "-copy" suffix
- 'D' - Search with deadgrep in current directory
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
This commit establishes a pattern for organizing debug code in separate
files that can be enabled/disabled via a central toggle.
## Changes
**1. Added debug toggle to user-constants.el**
New variable `cj/debug-modules` controls which modules load debug functions:
- Set to nil (default): No debug functions loaded
- Set to list of symbols: Load debug for specific modules
Example: (setq cj/debug-modules '(org-agenda mail))
- Set to t: Load all debug modules
Example: (setq cj/debug-modules t)
Placed early in user-constants.el so it's available before other modules load.
**2. Created org-agenda-config-debug.el**
New debug file contains:
- `cj/org-agenda-debug-dump-files` - Shows all org-agenda-files with status,
file sizes, and modification times
- `cj/org-agenda-debug-rebuild-timing` - Measures rebuild performance and
reports detailed timing statistics
- `cj/log-silently` - Helper function to write to *Messages* without echo
All functions use ;;;###autoload for easy invocation before explicit loading.
**3. Added conditional require to org-agenda-config.el**
Checks `cj/debug-modules` and conditionally loads org-agenda-config-debug.el:
```elisp
(when (or (eq cj/debug-modules t)
(memq 'org-agenda cj/debug-modules))
(require 'org-agenda-config-debug ...))
```
## Benefits
**Cleaner separation of concerns:**
- Production code stays in main config files
- Debug code isolated in *-debug.el files
- Easy to enable/disable debugging per module
**Reusable pattern:**
- Can be applied to any config module (mail, chime, etc.)
- Consistent naming: <module>-debug.el
- Consistent namespace: cj/<module>-debug-*
**Zero overhead when disabled:**
- Debug files not loaded unless explicitly enabled
- No performance impact on normal usage
## Usage
To enable org-agenda debug functions:
```elisp
;; In user-constants.el or early-init.el
(setq cj/debug-modules '(org-agenda))
```
Then restart Emacs and run:
- M-x cj/org-agenda-debug-dump-files
- M-x cj/org-agenda-debug-rebuild-timing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Update configuration to use renamed chime variables:
- chime-modeline-lookahead → chime-modeline-lookahead-minutes
- Update comment referencing chime-tooltip-lookahead-hours
These variables were renamed in chime.el commit 2a89893
(feat: comprehensive test improvements and lookahead refactoring).
Fixes issue where modeline wasn't displaying after Emacs restart
because the old variable name had no effect.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Add a function to automatically save all org-gcal files after
synchronization completes. This ensures that any changes are
persisted, enhancing data consistency. Advise
`org-gcal--sync-unlock` to trigger auto-saving upon sync completion.
|
|
Remove user confirmation and file listing prompt. Simplify the
script by directly deleting .eln and .elc files in the specified
location and confirming completion.
|
|
Remove unnecessary blank lines in function docstrings to enhance
readability. Update chime package settings to use a local version
instead of the latest from GitHub, and adjust modeline lookahead and
tooltip settings for better event visibility.
|
|
Document key lessons from chime.el timestamp refactoring project:
## New Sections Added
**Test Future-Proofing & Time-Based Testing**
- Dynamic timestamp generation patterns and benefits
- Never hardcode dates in tests - use relative time helpers
- Mock time via function substitution (with-test-time pattern)
- Code examples showing before/after patterns
**Large-Scale Test Refactoring Strategy**
- Strategic planning: tackle biggest challenges first
- Execution approach: maintain 100% pass rate throughout
- Project management: track progress visibly, celebrate milestones
- Know when you're done: not all files need changes
**Real-World Example**
- chime.el project: 23 files, 339 tests
- 16 files refactored (251 tests), 7 files skipped (88 tests)
- 100% pass rate maintained across all refactoring
- Result: future-proof test suite that never expires
## Key Insights
- "Tackle biggest challenge first" eliminates intimidation
- Work in batches but commit individually for clean history
- Don't let perfectionism create unnecessary work
- Strategic approach builds momentum and confidence
Added "Hardcoded dates in tests" to Red Flags section.
These lessons capture the methodology that successfully completed
the hardest refactoring task in the project.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Add :ensure t to elisp-lint use-package declaration to guarantee
it's always installed. This supports chime.el development workflow
where 'make lint' provides comprehensive code quality checks.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Extended the modeline display lookahead to 2 hours and added new
formatting for modeline content, including a compact time-until
format and title truncation for long event titles. Disabled chime
sound notifications for a quieter experience.
|
|
|
|
Remove unused comment and fix consult-line keybinding override.
Update completion styles with 'basic' for better flexibility. Clean
up Yasnippet integration comments. Add more descriptive which-key
labels to improve usability.
|
|
This change defers the loading of the org-roam package by 1 second.
This is a workaround to org-roam not loading soon enough after launch
to have created the necessary capture templates. I'll fix that in an
upcoming org-roam refactor session.
|
|
Replace the `setq yas-snippet-dirs` with `list` function for better
readability and add `yas-reload-all` to ensure snippets are
reloaded. Remove `ivy-yasnippet` configuration as it is not
required.
|
|
Include the `*Async-native-compile-log*` buffer in the list of popup
rules for improved buffer management.
|
|
|
|
|
|
Renamed the module 'custom-file-buffer' to 'custom-buffer-file' to
ensure consistency across the codebase. This change affects module
imports and test files. Additionally, new module
'system-commands.el' has been created to handle system power and
session management commands, removing these functionalities from
'wip.el'.
|
|
Added detailed guidelines and examples for writing effective
integration tests in the quality-engineer documentation. This
includes naming conventions, docstring requirements, file structure,
and when to use integration tests. Expanded sections cover balancing
test types and organizing test files for clarity and
maintainability.
|
|
|
|
Remove local load-path in favor of vc installation for wttrin to use
the source (latest revision).
|
|
Forward declare internal org-gcal variables and functions to improve
code clarity. Update use-package declaration with version control
information to use my fork of org-gcal (fixes, better testing).
|
|
Add a new test file `test-org-gcal-mock.el` to mock and capture what
org-gcal sends to the Google Calendar API. This enables debugging of
sync issues without making real API calls. Includes methods to
capture HTTP requests and verify API call details.
|
|
Clean up the code by removing an unnecessary commented-out import
line for show-kill-ring in the initialization file.
|
|
Expand file organization to include unit and integration test
directions. Provide detailed naming conventions with examples.
Clarify expected result naming to ensure tests are self-documenting.
|
|
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.
|
|
Removed comments indicating test status for required modules to
clean up and simplify the init.el file.
|
|
Add comprehensive documentation and workflow details for the ERT
test runner, including integration with Projectile projects for
automatic test discovery.
Refactor code to support focus/unfocus workflows, allowing
developers to efficiently manage test execution by focusing on
specific test files.
Introduce internal utility functions `cj/test--do-*` to modularize
logic for file operations and focus management, improving code
maintainability.
Add new tests in `test-test-runner.el` to validate the enhanced
functionality, ensuring robust handling of focus operations and test
execution scenarios.
|
|
Add comprehensive documentation and workflow details for the ERT
test runner, including integration with Projectile projects for
automatic test discovery.
Refactor code to support focus/unfocus workflows, allowing
developers to efficiently manage test execution by focusing on
specific test files.
Introduce internal utility functions `cj/test--do-*` to modularize
logic for file operations and focus management, improving code
maintainability.
Add new tests in `test-test-runner.el` to validate the enhanced
functionality, ensuring robust handling of focus operations and test
execution scenarios.
|
|
Add comprehensive documentation and workflow details for the ERT
test runner, including integration with Projectile projects for
automatic test discovery.
Refactor code to support focus/unfocus workflows, allowing
developers to efficiently manage test execution by focusing on
specific test files.
Introduce internal utility functions `cj/test--do-*` to modularize
logic for file operations and focus management, improving code
maintainability.
Add new tests in `test-test-runner.el` to validate the enhanced
functionality, ensuring robust handling of focus operations and test
execution scenarios.
|
|
- Move `browser-config` from 'Modules In Test' to active modules
- Refactor browser handling functions for better error handling:
- Introduce `cj/--do-apply-browser-choice` and
- `cj/--do-choose-browser` Return status symbols for success and
- error cases Add comprehensive unit tests in
- `tests/test-browser-config.el` Focus on internal `cj/--do-*`
- functions and file I/O using temp files Validate return values and
- ensure isolated tests with setup/teardown functions Ensure
- consistent handling of browser configurations and improve
- initialization logic
|
|
Enable 'jumper' module by uncommenting its require statement in
init.el. Enhance 'jumper' by adding detailed documentation,
refactoring logic into internal functions, and updating keybinding
setup for better usability. Integrate 'which-key' for improved
keybinding assistance. Add comprehensive unit tests for 'jumper'
functionalities to ensure reliability.
|
|
Rename `lorem-generator.el` to `lorem-optimum.el` for fun.
Enhance text tokenization, Markov chain learning, and text
generation functions. Introduce new configuration variables for
training files and improve efficiency with vectorized access. Add
comprehensive benchmarks and unit tests under `tests/`. This
improves performance and lays groundwork for further extensions.
|
|
Remove unnecessary autoload directives from various functions across
multiple modules, cleaning up the codebase and improving
readability. These directives were redundant and not needed for the
current project setup.
|
|
Add a new function `cj/--parse-email-string` to parse email strings
with multiple formats and separators, ensuring robust handling of
real-world email variations. This commit also includes extensive
tests for the new parsing function, covering normal, edge, and
special cases, ensuring comprehensive test coverage and reliability.
|
|
Introduce `cj/--process-webclip-content` to enhance webclip
processing by removing the first heading and demoting subsequent
headings, preserving page structure. Includes tests for thorough
validation of the new functionality.
|
|
Refined comments to note completion of module tests. Removed
outdated function and disabled a module. Adjusted 'org-roam-config'
for test addition.
|
|
Deleted `test-custom-org-agenda-functions.el.disabled` as it was
obsolete. Removed commented-out global keybinding in
`org-agenda-config.el` for clarity.
|
|
Introduce several utility functions for org-roam configuration,
including `cj/--generate-roam-slug`, `cj/--demote-org-subtree`, and
`cj/--format-roam-node`. These enhance title-to-slug conversion,
subtree demotion, and node file formatting.
Additionally, include comprehensive test cases for these functions
to ensure correctness and reliability in various scenarios.
|
|
Add line manipulation utilities: `append-to-lines`,
`prepend-to-lines`, `indent-lines`, and `dedent-lines`. Add tests
for these functions and improve existing text wrapping
functionalities with `wrap`, `unwrap`, and `surround`
implementations. Extend keymap for easier access to these functions.
|
|
Introduce new functions cj/toggle-quotes, cj/reverse-lines, and
cj/number-lines for line manipulation. cj/toggle-quotes swaps quotes
within a region, cj/reverse-lines reverse the line order, and
cj/number-lines adds line numbers with a customizable format,
supporting zero-padding. Update keymap with new bindings. Add
comprehensive tests for each function.
|