Subcommand dispatch is now help-driven instead of substring-matching "REVSET", so multi-level subcommands (`tag set`, `bookmark move`, …) and non-`-r` revset flags (`--to`) work, and pre-supplied revset flags bypass the picker instead of being double-injected.
5.0 KiB
5.0 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.3.0 — 2026-05-04
Subcommand dispatch is now help-driven instead of substring-matching
"REVSET", so multi-level subcommands and non--r revset flags work.
Fixed
jjf bm main(wherebmis a user alias forbookmark move) now correctly emitsjj bm main --to <picked>instead of-r <picked>, which jj rejected. jjf parses the leaf'sOptions:block and picks-r/--revision[s]first, then-t, --to.--fromis intentionally not a fallback (different semantics).jjf tag set v0.2.0no longer errors with "doesn't take revisions". jjf now walks into multi-level subcommands by parsing each parent'sCommands:block, sotag set,bookmark move,git push, etc. resolve to their actual leaf and read its real flag set.
Added
- Bypass mode when the user already passed a revset flag in their args.
jjf describe -r @-now runs verbatim instead of double-injecting-r. Triggers on any of-r,--revision,--revisions,-t,--toin passthrough. - Refusal message for leaves with no revset flag now includes the
resolved leaf path (e.g.
jjf workspace list→ "'jj workspace list' takes no revset flag — run 'jj workspace list' directly") so users see exactly which command jjf landed on. - Unit tests for the help parsers and command-line construction
against captured fixtures of
jj tag set --help,jj bookmark move --help, andjj tag --help.
0.2.0 — 2026-04-29
Picker now renders jj's real graph (merge connectors and all), with the cursor/filter aware of decorative rows.
Changed
- Graph rendering now uses jj's native
--graphoutput instead of a custom one-row-per-commit reconstruction. Merge connectors (├─┬─╮,├─╯,╰─╯) appear exactly asjj logdraws them, so the picker is a 1:1 visual match for the real log. - Cursor row arrow glyphs changed from
├──►to●──▶so the selection arrow doesn't visually clash with the graph chrome. - Hint row at the bottom of the picker drops trailing key/label pairs
(
esc quit,^U clear, …) until it fits on one row. Previously a narrow terminal would wrap the hint and push the search bar off the top of the screen.
Added
- Connector / decorative graph rows (
├─╮,╰─╯,~, …) are kept in the picker for visual fidelity withjj log. Cursor navigation (arrows, Page{Up,Down}, Home, End, Ctrl-N/P/J/K, Ctrl-A/E) skips over them; selection is silently ignored on connector rows. - Filtering (any non-empty query) excludes connector rows, since they
can't match a query and a stray
├─╮between filtered hits would carry no useful information.
Fixed
- Long descriptions no longer split across rows when the user has
ui.log-word-wrap = trueconfigured globally — the internaljj loginvocation now forcesui.log-word-wrap=falseso a single commit always renders on a single picker row.
0.1.0 — 2026-04-29
Initial release.
Added
- Fuzzy picker over
jj logfor any jj subcommand that accepts-r. - Smart prefix matching: typing the bold-highlighted portion of a change ID jumps to that revision instantly. Falls back to nucleo fuzzy matching against description text.
- Multi-select via
Tab; selections joined into-r 'A|B|C'revset union. - Two-column layout (when terminal ≥ 80 cols): picker on left, live
jj show --summarypreview of the cursor row on right, cached per revision. - Live command preview row showing the exact
jj …invocation that Enter will run. - Preflight check via
jj <sub> --help: subcommands that don't accept revisions (status,log, etc.) are rejected upfront with a friendly message. --ignore-working-copyon the internaljj logcall so the picker doesn't race with prompt/editor auto-snapshot integrations.- Shell integration via
jjf init <bash|zsh|fish|nu>:- rewrites shell history so up-arrow recalls the resolved
jj …command rather than thejjf …invocation, - drops the
jjf …entry on cancel/error so cancelled invocations don't pollute history, - defaults
jjf(no args) tojjf show, - passes meta-commands and bare flags through to the binary directly.
- rewrites shell history so up-arrow recalls the resolved
- Vim-style and emacs-style navigation:
↑↓,Ctrl-N/P,Ctrl-J/K,PageUp/PageDown,Home/End,Ctrl-A/E. - Light-terminal detection via
COLORFGBG: cursor-row highlight uses reverse video on light themes (where the dark gray bg is invisible). - Synchronized output (DEC mode 2026) around each redraw to eliminate tearing on Kitty / WezTerm / foot / recent iTerm.