-
-
Save hroi/d0dc0e95221af858ee129fd66251897e to your computer and use it in GitHub Desktop.
# Place me in ~/.config/fish/functions | |
# Then add me to `fish_vcs_prompt`: `funced fish_vcs_prompt` and save it to | |
# your personal config: `funcsave fish_vcs_prompt;` | |
function fish_jj_prompt --description 'Write out the jj prompt' | |
# Is jj installed? | |
if not command -sq jj | |
return 1 | |
end | |
# Are we in a jj repo? | |
if not jj root --quiet &>/dev/null | |
return 1 | |
end | |
# Generate prompt | |
jj log --ignore-working-copy --no-graph --color always -r @ -T ' | |
surround( | |
" (", | |
")", | |
separate( | |
" ", | |
bookmarks.join(", "), | |
coalesce( | |
surround( | |
"\"", | |
"\"", | |
if( | |
description.first_line().substr(0, 24).starts_with(description.first_line()), | |
description.first_line().substr(0, 24), | |
description.first_line().substr(0, 23) ++ "…" | |
) | |
), | |
"(no description set)" | |
), | |
change_id.shortest(), | |
commit_id.shortest(), | |
if(conflict, "(conflict)"), | |
if(empty, "(empty)"), | |
if(divergent, "(divergent)"), | |
if(hidden, "(hidden)"), | |
) | |
) | |
' | |
end |
Could you provide a more complete example that shows a jj bookmark in a JJ repo, but otherwise shows a Git branch in a git repo.
Heads up that line 22 got changed to
bookmarks.join(", "),
in recent versions.
Done.
Could you provide a more complete example that shows a jj bookmark in a JJ repo, but otherwise shows a Git branch in a git repo.
The fish_vcs_prompt
function that is distributed with fish tries the different prompt generators in order. It is called from fish_prompt
. Edit it with funced fish_vcs_prompt
.
Mine looks like this:
function fish_vcs_prompt --description "Print all vcs prompts"
# If a prompt succeeded, we assume that it's printed the correct info.
# This is so we don't try svn if git already worked.
fish_jj_prompt $argv
or fish_git_prompt $argv
or fish_hg_prompt $argv
or fish_fossil_prompt $argv
# The svn prompt is disabled by default because it's quite slow on common svn repositories.
# To enable it uncomment it.
# You can also only use it in specific directories by checking $PWD.
# or fish_svn_prompt
end
This is my modification based on the fish-shell fish_jj_prompt and this gist:
function fish_jj_prompt
# If jj isn't installed, there's nothing we can do
# Return 1 so the calling prompt can deal with it
if not command -sq jj
return 1
end
set -l info "$(
jj log 2>/dev/null --no-graph --ignore-working-copy --color=always --revisions @ --template '
surround(
"(",
")",
separate(" ",
bookmarks,
if(conflict, label("conflict", "conflict")),
if(divergent, label("divergent", "divergent")),
if(parents.len() > 1, label("merge", "merged")),
coalesce(
if(
empty,
label("empty", "empty"),
),
label("change", "change"),
),
)
)
'
)"
or return 1
if test -n "$info"
printf ' %s' $info
end
end
I love this! Thanks for making this, I forked yours and added some usage of the label
function to closer match jj st
, which adds colours to (empty) and (conflict).
https://gist.github.com/camtheman256/028aa2f1ced68cd435093a2d4680cf88
Heads up that line 22 got changed to
bookmarks.join(", "),
in recent versions.