Thanks to visit codestin.com
Credit goes to Github.com

Skip to content

blazingjj/blazingjj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

blazingjj - A TUI for Jujutsu/jj

Built in Rust with Ratatui. Interacts with jj CLI.

Features

  • Log
    • Scroll through the jj log and view change details in side panel
    • Create new changes from selected change with n
    • Edit changes with e/E
    • Describe changes with d
    • Abandon changes with a
    • Toggle between color words and git diff with p
    • See different revset with r
    • Set a bookmark to selected change with b
    • Fetch/push with f/p
    • Squash current changes to selected change with s/S
  • Files
    • View files in current change and diff in side panel
    • See a change's files from the log tab with Enter
    • View conflicts list in current change
    • Toggle between color words and git diff with w
    • Untrack file with x
  • Bookmarks
    • View list of bookmarks, including from all remotes with a
    • Create with c, rename with r, delete with d, forget with f
    • Track bookmarks with t, untrack bookmarks with T
    • Create new change with n, edit change with e/E
  • Command log: View every command blazingjj executes
  • Config: Configure blazingjj with your jj config
  • Command box: Run jj commands directly in blazingjj with :
  • Help: See all key mappings with ?

Setup

Make sure you have jj installed first.

  • With cargo binstall: cargo binstall blazingjj
  • With cargo install: cargo install blazingjj --locked (may take a few moments to compile)
  • With pre-built binaries: View releases

To build and install a pre-release version: cargo install --git https://github.com/blazingjj/blazingjj.git --locked

Configuration

You can optionally configure the following options through your jj config:

  • blazingjj.highlight-color: Changes the highlight color. Can use named colors. Defaults to #323264
  • blazingjj.diff-format: Change the default diff format. Can be color-words or git. Defaults to color_words
    • If blazingjj.diff-format is not set but ui.diff.format is, the latter will be used
  • blazingjj.diff-tool: Specify which diff tool to use by default
    • If blazingjj.diff-tool is not set but ui.diff.tool is, the latter will be used
  • blazingjj.bookmark-template: Change the bookmark name template for generated bookmark names. Defaults to 'push-' ++ change_id.short()
    • If blazingjj.bookmark-template is not set but templates.git_push_bookmark is, the latter will be used
  • blazingjj.layout: Changes the layout of the main and details panel. Can be horizontal (default) or vertical
  • blazingjj.layout-percent: Changes the layout split of the main page. Should be number between 0 and 100. Defaults to 50

Example: jj config set --user blazingjj.diff-format "color-words" (for storing in user config file, repo config is also supported)

Usage

To start blazingjj for the repository in the current directory: blazingjj

To use a different repository: blazingjj --path ~/path/to/repo

To start with a different default revset: blazingjj -r '::@'

Key mappings

See all key mappings for the current tab with ?.

Basic navigation

  • Quit with q
  • Change tab with 1/2/3 or with h/l
  • Scrolling in main panel
    • Scroll down/up by one line with j/k or down/up arrow
    • Scroll down/up by half page with J/K or down/up arrow
  • Scrolling in details panel
    • Scroll down/up by one line with Ctrl+e/Ctrl+y
    • Scroll down/up by a half page with Ctrl+d/Ctrl+u
    • Scroll down/up by a full page with Ctrl+f/Ctrl+b
  • Open a command popup to run jj commands using : (jj prefix not required, e.g. write new main instead of jj new main)

Log tab

  • Select current change with @
  • View change files in files tab with Enter
  • Display different revset with r (jj log -r)
  • Change details panel diff format between color words (default) and Git (and diff tool if set) with w
  • Toggle details panel wrapping with W
  • Create new change after highlighted change with n (jj new)
    • Create new change and describe with N (jj new -m)
  • Edit highlighted change with e (jj edit)
    • Edit highlighted change ignoring immutability with E (jj edit --ignore-immutable)
  • Abandon a change with a (jj abandon)
  • Describe the highlighted change with d (jj describe)
    • Save with Ctrl+s
    • Cancel with Esc
  • Set a bookmark to the highlighted change with b (jj bookmark set)
    • Scroll in bookmark list with j/k
    • Create a new bookmark with c
    • Use auto-generated name with g
  • Squash current changes (in @) to the selected change with s (jj squash)
    • Squash current changes to the selected change ignoring immutability with S (jj squash --ignore-immutable)
  • Git fetch with f (jj git fetch)
    • Git fetch all remotes with F (jj git fetch --all-remotes)
  • Git push with p (jj git push)
    • Git push all bookmarks with P (jj git push --all)
    • Use Ctrl+p or Ctrl+P to include pushing new bookmarks (--allow-new)

Files tab

  • Select current change with @
  • Change details panel diff format between color words (default) and Git (and diff tool if set) with w
  • Toggle details panel wrapping with W

Bookmarks tab

  • Show bookmarks with all remotes with a (jj bookmark list --all)
  • Create a bookmark with c (jj bookmark create)
  • Rename a bookmark with r (jj bookmark rename)
  • Delete a bookmark with d (jj bookmark delete)
  • Forget a bookmark with f (jj bookmark forget)
  • Track a bookmark with t (only works for bookmarks with remotes) (jj bookmark track)
  • Untrack a bookmark with T (only works for bookmarks with remotes) (jj bookmark untrack)
  • Change details panel diff format between color words (default) and Git (and diff tool if set) with w
  • Toggle details panel wrapping with W
  • Create a new change after the highlighted bookmark's change with n (jj new)
    • Create a new change and describe with N (jj new -m)
  • Edit the highlighted bookmark's change with e (jj edit)
    • Edit the highlighted bookmark's change ignoring immutability with E (jj edit --ignore-immutable)

Command log tab

  • Select latest command with @
  • Toggle details panel wrapping with W

Configuring

Keys can be configured

[blazingjj.keybinds.log_tab]
save = "ctrl+s"

See more in keybindings.md

Development

Setup

  1. Install Rust and
  2. Clone repository
  3. Run with cargo run
  4. Build with cargo build --release (output in target/release)
  5. You can point it to another jj repo with --path: cargo run -- --path ~/other-repo

Logging/Tracing

blazingjj has 2 debugging tools:

  1. Logging: Enabled by setting BLAZINGJJ_LOG=1 when running. Produces a blazingjj.log log file
  2. Tracing: Enabled by setting BLAZINGJJ_TRACE=1 when running. Produces trace-*.json Chrome trace file, for chrome://tracing or ui.perfetto.dev

Release process

Create a release commit using cargo release, e.g. cargo release minor, then open a PR and after it has been merged, create a GitHub release for that commit. The "Release" workflow will fill in the description from the changelog, generate and attach the binaries and publish the new version to crates.io. That's it.

Acknowledgements

Blazingjj is a fork of lazyjj, started by Charles Crete in 2023.

About

TUI for Jujutsu/jj

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 19

Languages