🎉 This release enhances performance and introduces stability improvements in log parsing and command execution. It also takes back some of the stability by adding basic mouse support.
Features
📈 Performance Improvements
Implemented frame-rate limited rendering (capped at 120 FPS) to significantly improve application performance by deferring view generation until the next frame tick. This addresses the slowest path in the application - view generation - making it much more responsive
🐭 Mouse Support
- Clickable and scrollable revisions view (excluding operations) (#391)
- Clickable and scrollable op log view
- Draggable and scrollable (vertically + horizontally) preview pane
- Scrollable diff window
- Replaced custom viewport with bubbles/viewport for more responsive rendering (#396)
mouse.mp4
🔎 Preview
- Replaced surrounding border with divider for more preview space (#396)
Operation Log (oplog)
- Added
jj op revertfunctionality withRkey binding (#400)
Revset Handling
- Pressing up arrow in empty revset field now sets the current revset (#284)
- Fixed mismatch where empty revset input would use config default instead of session default from
-rflag. Now correctly updatesCurrentRevsetto session default instead of empty string (#399)
Details View
- Allow quitting from details view when quit key is pressed (e.g.
q)
Bug Fixes
Rendering Issues
- Fixed double rendering of inline describe content when next line contains only revision line. Added
revisionLineRenderedtracking flag to properly sequence the description overlay rendering (#403, #369) - Fixed viewport adjustment when PageDown moves cursor below viewport. The renderer now continues rendering until it reaches the focused item, ensuring proper viewport adjustment (#395)
- Fixed PageUp/Down navigation at top and bottom of revset when less than one page remains. Now includes early return with feedback message when already at boundary (#387, #386)
- Removed incorrect space trimming in renderer (#393)
Log Processing
- Applied partial fixes to prevent out-of-order row updates in log streamer
Details View
- Handle cases where conflict markers span multiple lines (#398)
- Ignore virtual selection on refresh (#381)
Operation Log (oplog)
Command Execution
- Added a mechanism for restoring failed commands to input field, allowing retries without retyping (#392)
Template System
- Enhanced
jj logparsing using native template prefixes for better change ID and commit ID detection. Fixes issues when bookmarks are "HexLike" (#358, #228, #372)
What's Changed
- Remove teatest package and simplify tests by @idursun in #379
- internal/parser: get revision ids with template prefixes by @baggiiiie in #372
- fix(oplog): improve operation id detection by @idursun in #380
- refactor: serialise command execution by @idursun in #378
- Revert "refactor: serialise command execution" by @idursun in #383
- revisions: fix scrolling at the top and bottom of revset by @baggiiiie in #387
- refactor: introduce and implement common.Model by @idursun in #384
- refactor: Replace custom cell buffer implementation with
cellbufpackage by @idursun in #388 - refactor: use simple layout functions to lay out the main UI by @idursun in #389
- Coming back to previous state when exec command failed by @ArnaudBger in #392
- feat: add basic mouse support by @idursun in #391
- list/renderer: fix viewport adjustment on PageDown by @baggiiiie in #395
- Make preview horizontally scrollable by @idursun in #396
- revset: fix revset not using default when empty by @baggiiiie in #399
- operation: add op log revert by @baggiiiie in #400
- revision: fix double rendering of inline describe content by @baggiiiie in #403
- refactor: replace usages of scattered width/height pairs with
ViewNodeby @idursun in #401 - describe: catch cursor blinking to avoid unnecessary rendering by @baggiiiie in #404
New Contributors
- @ArnaudBger made their first contribution in #392
Full Changelog: v0.9.6...v0.9.7