-
-
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
endThis 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
endI 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.