feat(zsh): jj support

Why? idk

REF: https://github.com/jj-vcs/jj
This commit is contained in:
Ahmad Ansori Palembani 2025-04-25 07:27:53 +07:00
parent e80a0825e0
commit 1c1e7d5ec9
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
4 changed files with 50 additions and 2 deletions

View file

@ -71,6 +71,9 @@ _install_plugin https://github.com/zsh-users/zsh-autosuggestions
# ]] Plugins
# Custom fpath
fpath+=( "$XDG_DATA_HOME/zsh/functions/VCS_Info" )
_command_exists() {
[ $(command -v $1 | wc -l) -gt 0 ] && return 0 || return 1
}

View file

@ -7,9 +7,10 @@ setopt prompt_subst
zstyle ':vcs_info:*' stagedstr 'M'
zstyle ':vcs_info:*' unstagedstr '!'
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:git:*' formats '%F{5} %b %F{1}%c%u %f'
zstyle ':vcs_info:jj:*' formats '%F{5}(jj)  %b %F{1}%c%u %f'
zstyle ':vcs_info:git:*' formats '%F{5}(git)  %b %F{1}%c%u %f'
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' enable git jj
+vi-git-untracked() {
# Return early if we're not in git dir
[ $(git rev-parse --is-inside-work-tree 2> /dev/null) = 'true' ] || return 0

View file

@ -0,0 +1,9 @@
## vim: filetype=zsh
setopt localoptions NO_shwordsplit
[[ $1 == '--flavours' ]] && return 1
VCS_INFO_check_com jj || return 1
vcs_comm[detect_need_file]=working_copy
VCS_INFO_bydir_detect '.jj'
return $?

View file

@ -0,0 +1,35 @@
## vim: filetype=zsh
setopt localoptions NO_shwordsplit
local action branch base staged unstaged revision misc
local _is_working_copy _is_root _is_empty _bookmarks _bookmark_id _parent_id
eval `${vcs_comm[cmd]} log --ignore-working-copy -n 1 --no-graph --color never \
-r "coalesce(ancestors(present(@)) & bookmarks(), root())" \
-T '
separate(" ",
"_bookmark_id=" ++ change_id,
"_is_working_copy=" ++ current_working_copy,
"_is_root=" ++ root,
"branch=\"" ++ bookmarks.join(" ") ++ "\"",
)
'`
eval `${vcs_comm[cmd]} log --ignore-working-copy -n 1 --no-graph --color never -r "@" \
-T '
separate(" ",
"revision=\"" ++ change_id.shortest() ++ "\"",
"_parent_id=\"" ++ parents.map(|c| c.change_id()).join("-") ++ "\"",
if(empty, "", "unstaged=true"),
if(conflict, "action=conflict")
)'`
if [[ $_is_working_copy == "false" && $_bookmark_id != $_parent_id ]]; then
staged=true
fi
if [[ $_is_root == "true" ]]; then
branch="root()"
fi
VCS_INFO_formats "${action}" "${branch}" "${base}" "${staged}" "${unstaged}" "${revision}" "${misc}"