diff --git a/internal/p10k.zsh b/internal/p10k.zsh index 62c71ab..3c78462 100644 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -3714,40 +3714,9 @@ function +vi-hg-bookmarks() { function +vi-vcs-detect-changes() { if [[ "${hook_com[vcs]}" == "git" ]]; then - local remote="$(git ls-remote --get-url 2> /dev/null)" - if [[ "$remote" =~ "github" ]] then - vcs_visual_identifier='VCS_GIT_GITHUB_ICON' - elif [[ "$remote" =~ "bitbucket" ]] then - vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON' - elif [[ "$remote" =~ "stash" ]] then - vcs_visual_identifier='VCS_GIT_BITBUCKET_ICON' - elif [[ "$remote" =~ "gitlab" ]] then - elif [[ "$remote" =~ "archlinux" ]] then - vcs_visual_identifier='VCS_GIT_ARCH_ICON' - if [[ "$remote" =~ "freedesktop" ]] then - vcs_visual_identifier='VCS_GIT_FREEDESKTOP_ICON' - elif [[ "$remote" =~ "gnome" ]] then - vcs_visual_identifier='VCS_GIT_GNOME_ICON' - else - vcs_visual_identifier='VCS_GITLAB_ICON' - fi - elif [[ "$remote" =~ "codeberg" ]] then - vcs_visual_identifier='VCS_GIT_CODEBERG_ICON' - elif [[ "$remote" =~ "debian" ]] then - vcs_visual_identifier='VCS_GIT_DEBIAN_ICON' - elif [[ "$remote" =~ "freebsd" ]] then - vcs_visual_identifier='VCS_GIT_FREEBSD_ICON' - elif [[ "$remote" =~ "gnu" ]] then - vcs_visual_identifier='VCS_GIT_GNU_ICON' - elif [[ "$remote" =~ "kde" ]] then - vcs_visual_identifier='VCS_GIT_KDE_ICON' - elif [[ "$remote" =~ "kernel" ]] then - vcs_visual_identifier='VCS_GIT_LINUX_ICON' - else - vcs_visual_identifier='VCS_GIT_ICON' - fi - + _p9k_vcs_icon "$remote" + vcs_visual_identifier=$_p9k__ret elif [[ "${hook_com[vcs]}" == "hg" ]]; then vcs_visual_identifier='VCS_HG_ICON' elif [[ "${hook_com[vcs]}" == "svn" ]]; then @@ -3880,27 +3849,14 @@ function _p9k_vcs_status_purge() { } function _p9k_vcs_icon() { - case "$VCS_STATUS_REMOTE_URL" in - *github*) _p9k__ret=VCS_GIT_GITHUB_ICON;; - *bitbucket*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;; - *stash*) _p9k__ret=VCS_GIT_BITBUCKET_ICON;; - *archlinux*) _p9k__ret=VCS_GIT_ARCH_ICON;; - *freedesktop*) _p9k__ret=VCS_GIT_FREEDESKTOP_ICON;; - *gnome*) _p9k__ret=VCS_GIT_GNOME_ICON;; - *gitlab*) _p9k__ret=VCS_GIT_GITLAB_ICON;; - *codeberg*) _p9k__ret=VCS_GIT_CODEBERG_ICON;; - *debian*) _p9k__ret=VCS_GIT_DEBIAN_ICON;; - (#i)*freebsd*) _p9k__ret=VCS_GIT_FREEBSD_ICON;; - *gnu*) _p9k__ret=VCS_GIT_GNU_ICON;; - *kde*) _p9k__ret=VCS_GIT_KDE_ICON;; - *kernel*) _p9k__ret=VCS_GIT_LINUX_ICON;; - # Azure DevOps: visualstudio.com is the old hostname, dev.azure.com is the new one. - # https://learn.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate - (|*@|*.)(visualstudio.com|dev.azure.com)(|:*|/*)) - _p9k__ret=VCS_GIT_AZURE_ICON - ;; # old - *) _p9k__ret=VCS_GIT_ICON;; - esac + local pat icon + for pat icon in "${(@)_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS}"; do + if [[ $1 == $~pat ]]; then + _p9k__ret=$icon + return + fi + done + _p9k__ret= } function _p9k_vcs_render() { @@ -3930,7 +3886,7 @@ function _p9k_vcs_render() { state=CLEAN fi fi - _p9k_vcs_icon + _p9k_vcs_icon "$VCS_STATUS_REMOTE_URL" _p9k_prompt_segment prompt_vcs_$state "${__p9k_vcs_states[$state]}" "$_p9k_color1" "$_p9k__ret" 0 '' "" return 0 fi @@ -3984,7 +3940,7 @@ function _p9k_vcs_render() { # It's weird that removing vcs-detect-changes from POWERLEVEL9K_VCS_GIT_HOOKS gets rid # of the GIT icon. That's what vcs_info does, so we do the same in the name of compatibility. - _p9k_vcs_icon + _p9k_vcs_icon "$VCS_STATUS_REMOTE_URL" icon=$_p9k__ret fi @@ -7435,6 +7391,36 @@ _p9k_init_params() { _p9k_declare -b POWERLEVEL9K_VCS_CONFLICTED_STATE 0 _p9k_declare -b POWERLEVEL9K_HIDE_BRANCH_ICON 0 _p9k_declare -b POWERLEVEL9K_VCS_HIDE_TAGS 0 + _p9k_declare -a POWERLEVEL9K_VCS_GIT_REMOTE_ICONS + if (( $+_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS )); then + (( $#_POWERLEVEL9K_VCS_GIT_REMOTE_ICONS & 1 )) && _POWERLEVEL9K_VCS_GIT_REMOTE_ICONS+=('') + else + local domain= icon= domain2icon=( + 'archlinux.org' VCS_GIT_ARCHLINUX_ICON + 'dev.azure.com|visualstudio.com' VCS_GIT_AZURE_ICON + 'bitbucket.org' VCS_GIT_BITBUCKET_ICON + 'codeberg.org' VCS_GIT_CODEBERG_ICON + 'debian.org' VCS_GIT_DEBIAN_ICON + 'freebsd.org' VCS_GIT_FREEBSD_ICON + 'freedesktop.org' VCS_GIT_FREEDESKTOP_ICON + 'gitea.com|gitea.io' VCS_GIT_GITEA_ICON + 'github.com' VCS_GIT_GITHUB_ICON + 'gitlab.com' VCS_GIT_GITLAB_ICON + 'gnome.org' VCS_GIT_GNOME_ICON + 'gnu.org' VCS_GIT_GNU_ICON + 'kde.org' VCS_GIT_KDE_ICON + 'kernel.org' VCS_GIT_LINUX_ICON + 'sourcehut.org' VCS_GIT_SOURCEHUT_ICON + ) + typeset -ga _POWERLEVEL9K_VCS_GIT_REMOTE_ICONS + for domain icon in "${domain2icon[@]}"; do + _POWERLEVEL9K_VCS_GIT_REMOTE_ICONS+=( + '(|[A-Za-z0-9][A-Za-z0-9+.-]#://)(|[^:/?#]#[.@])((#i)'$domain')(|[/:?#]*)' + $icon + ) + done + _POWERLEVEL9K_VCS_GIT_REMOTE_ICONS+=('*' VCS_GIT_ICON) + fi _p9k_declare -i POWERLEVEL9K_CHANGESET_HASH_LENGTH 8 # Specifies the maximum number of elements in the cache. When the cache grows over this limit, # it gets cleared. This is meant to avoid memory leaks when a rogue prompt is filling the cache @@ -9427,7 +9413,7 @@ if [[ $__p9k_dump_file != $__p9k_instant_prompt_dump_file && -n $__p9k_instant_p zf_rm -f -- $__p9k_instant_prompt_dump_file{,.zwc} 2>/dev/null fi -typeset -g P9K_VERSION=1.19.10 +typeset -g P9K_VERSION=1.19.11 unset VSCODE_SHELL_INTEGRATION _p9k_init_ssh