diff options
| author | Craig Jennings <c@cjennings.net> | 2025-11-08 16:11:58 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2025-11-08 16:11:58 -0600 |
| commit | 8176eff73b826f7fec9d7f458f7d2f36f4d12e58 (patch) | |
| tree | 3e73394b689f0e32dce6930431d9060d946b0b79 /assets | |
| parent | d093a4a96c653d3f9adcbba17b4094d6d9a5a85a (diff) | |
feat: Fix modeline lag and add org multi-level sort with comprehensive tests
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>
Diffstat (limited to 'assets')
| -rw-r--r-- | assets/abbrev_defs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/assets/abbrev_defs b/assets/abbrev_defs index cd9c6818..8fc58efd 100644 --- a/assets/abbrev_defs +++ b/assets/abbrev_defs @@ -132,7 +132,7 @@ ("customizaton" "customization" nil :count 0) ("dacquiri" "daiquiri" nil :count 0) ("daneel" "Danneel" nil :count 0) - ("danneel" "Danneel" nil :count 25) + ("danneel" "Danneel" nil :count 26) ("daquiri" "daiquiri" nil :count 0) ("decieve" "deceive" nil :count 0) ("decisons" "decisions" nil :count 0) @@ -294,7 +294,7 @@ ("oppositiion" "opposition" nil :count 0) ("opppsite" "opposite" nil :count 0) ("orignal" "original" nil :count 0) - ("ot" "to" nil :count 42) + ("ot" "to" nil :count 43) ("otehr" "other" nil :count 3) ("otes" "notes" nil :count 0) ("outgoign" "outgoing" nil :count 0) @@ -393,7 +393,7 @@ ("takss" "tasks" nil :count 3) ("talekd" "talked" nil :count 0) ("talkign" "talking" nil :count 6) - ("teh" "the" nil :count 156) + ("teh" "the" nil :count 159) ("tehir" "their" nil :count 5) ("tehre" "there" nil :count 3) ("testimentary" "testamentary" nil :count 1) @@ -425,6 +425,7 @@ ("vehical" "vehicle" nil :count 0) ("visious" "vicious" nil :count 0) ("waht" "what" nil :count 4) + ("walkthrough" "walk" nil :count 0) ("warant" "warrant" nil :count 0) ("welfair" "welfare" nil :count 0) ("welomce" "welcome" nil :count 0) |
