ohmyzsh/plugins/jj
2024-11-18 12:37:21 +01:00
..
jj.plugin.zsh feat(jj): completions, aliases and prompt utils 2024-11-18 12:37:21 +01:00
README.md feat(jj): completions, aliases and prompt utils 2024-11-18 12:37:21 +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)

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, you can try adding ZSH_THEME_JJ_IGNORE_WORKING_COPY=1 to your theme, which will add --ignore-working-copy to all calls made to jj. The downside here is that your prompt might stay outdated until the next time jj gets a chance to not ignore the working copy.

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