1
0
mirror of https://github.com/robbyrussell/oh-my-zsh.git synced 2025-12-06 07:20:40 +01:00
Files
Cyril Plisko a98a9f7122 feat(jj): add jj aliases for common workflows (#13179)
- jj bookmark
    Aliases for bookmark subcommands
- jj git push
    Aliases for popular push flags
- jj new "trunk()"
- jj rebase -d "trunk()"
- jj status
2025-12-05 12:00:56 +01:00
..

jj - Jujutsu CLI

This plugin provides autocompletion for jj.

To use it, add jj to the plugins array of your zshrc file:

plugins=(... jj)

Aliases

Alias Command
jjb jj bookmark
jjbc jj bookmark create
jjbd jj bookmark delete
jjbf jj bookmark forget
jjbl jj bookmark list
jjbm jj bookmark move
jjbr jj bookmark rename
jjbs jj bookmark set
jjbt jj bookmark track
jjbu jj bookmark untrack
jjc jj commit
jjcmsg jj commit --message
jjd jj diff
jjdmsg jj desc --message
jjds jj desc
jje jj edit
jjgcl jj git clone
jjgf jj git fetch
jjgfa jj git fetch --all-remotes
jjgp jj git push
jjgpa jj git push --all
jjgpd jj git push --deleted
jjgpt jj git push --tracked
jjl jj log
jjla jj log -r "all()"
jjn jj new
jjnt jj new "trunk()"
jjrb jj rebase
jjrbm jj rebase -d "trunk()"
jjrs jj restore
jjrt cd "$(jj root || echo .)"
jjsp jj split
jjsq jj squash
jjst jj status

Prompt usage

Because jj has a very powerful template syntax, this plugin only exposes a convenience function jj_prompt_template to read information from the current change. It is basically the same as jj log --no-graph -r @ -T $1:

_my_theme_jj_info() {
  jj_prompt_template 'self.change_id().shortest(3)'
}

PROMPT='$(_my_theme_jj_info) $'

jj_prompt_template escapes % signs in the output. Use jj_prompt_template_raw if you don't want that (e.g. to colorize the output).

However, because jj can be used inside a Git repository, some themes might clash with it. Generally, you can fix it with a wrapper function that tries jj first and then falls back to git if it didn't work:

_my_theme_vcs_info() {
  jj_prompt_template 'self.change_id().shortest(3)' \
  || git_prompt_info
}

PROMPT='$(_my_theme_vcs_info) $'

You can find an example here.

Performance

Sometimes jj can be slower than git.

If you feel slowdowns, consider using the following:

zstyle :omz:plugins:jj ignore-working-copy yes

This will add --ignore-working-copy to all jj commands executed by your prompt. The downside here is that your prompt might be out-of-sync until the next time jj gets a chance to not ignore the working copy (i.e. you manually run a jj command).

If you prefer to keep your prompt always up-to-date but still don't want to feel the slowdown, you can make your prompt asynchronous. This plugin doesn't do this automatically so you'd have to hack your theme a bit for that.

See Also

Contributors

  • nasso - Plugin Author
  • imp - Occasional Alias Contributor