- Reverse-video caret in input row (was cyan █ block — collided with
the cyan ❯ prompt and read as 'unfocused-pane cursor')
- Synchronized-output brackets (DEC mode 2026) around each redraw —
eliminates tearing on Kitty/WezTerm/foot/recent iTerm; ignored elsewhere
- Two-tone hint row (keys at normal weight, labels dim) gives the eye
a scan anchor
- Dim header above preview pane (── <change_id> ────) anchors the right
column to the cursor row's revision
- Light-terminal detection via COLORFGBG: switch cursor-row highlight
from indexed-237 dark-gray bg to reverse-video on themes where the
dark bg would be invisible
- Shell wrappers echo the resolved 'jj …' command (dim '$' prefix)
before running it, so it's visible in scrollback
Previously, the original `jjf …` invocation only got dropped from
history on successful confirm. A cancelled or errored picker left a
useless `jjf …` entry behind. Now bash drops it unconditionally via
`_jjf_drop_last_history`; fish arms the postexec hook before the
`--emit` call so the deletion happens regardless of exit path.
When term_cols >= 80, right side shows jj show --summary of the
currently highlighted revision (header stripped — just description and
the M/A/D file list, with description capped at 3 lines). Per-row
preview is cached, so navigating back to previously-viewed revs is
instant. Bumps the viewport floor to 15 rows (max = full terminal) so
the preview has room to be useful.
Mirrors the original bash+fzf script's behavior — `jjf` alone becomes
a quick rev browser. Implemented in shell wrappers (so the --emit
history-rewrite path still applies); the binary itself still prints
usage on bare invocation, for explicit invocations.
Previously used jj's default revsets.log, which is intentionally narrow
for jj log's scrollback purposes (`@ | trunk() | ancestors(mutable, 2)`).
For a picker, we want every visible revision so older revs (for abandon,
rebase -d, etc.) are reachable. `--limit 1000` keeps the blast radius
bounded on huge repos; smart prefix matching keeps lookup cheap.
A TUI revision picker for jujutsu (jj). Wraps any jj subcommand with an
inline fuzzy-finder over jj log, then forwards the picked revision(s)
as -r '<id>' to the underlying jj invocation.
Features:
- Inline viewport (no full-screen alt-screen takeover)
- Smart prefix matching: typing the bold portion of a change ID jumps
to that revision instantly
- Multi-select via Tab; emitted as -r 'A|B|C' revset union
- Preflight detection of subcommands that don't accept -r
- Optional shell integration (jjf init <bash|zsh|fish|nu>) that
rewrites shell history so up-arrow recalls the resolved jj command
Hand-rolled ANSI rendering to /dev/tty; only crossterm, nucleo-matcher,
anyhow, and libc as runtime dependencies.