This repository has been archived by the owner on Apr 24, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 938
/
Copy pathgitstatus.p9k
152 lines (131 loc) · 9.87 KB
/
gitstatus.p9k
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
################################################################
# @title powerlevel9k Segment - Date
# @source [powerlevel9k](https://github.com/bhilburn/powerlevel9k)
##
(){
# Set the right locale to protect special characters
local LC_ALL="" LC_CTYPE="en_US.UTF-8"
################################################################
# Register segment helper icons
# Parameters:
# name_of_icon Generic Flat/Awesome-Patched Awesome-FontConfig Awesome-Mapped-FontConfig NerdFont
# ●
p9k::register_icon "GITSTATUS_UNSTAGED" $'\u25CF' $'\uE17C' $'\uF06A' '\u'${CODEPOINT_OF_AWESOME_EXCLAMATION_CIRCLE} $'\uF06A'
# # ?
# p9k::register_icon "GITSTATUS_UNTRACKED" '?' $'\uE16C' $'\uF059' '\u'${CODEPOINT_OF_AWESOME_QUESTION_CIRCLE} $'\uF059'
# ✚
p9k::register_icon "GITSTATUS_STAGED" $'\u271A' $'\uE168' $'\uF055' '\u'${CODEPOINT_OF_AWESOME_PLUS_CIRCLE} $'\uF055'
# ⍟
p9k::register_icon "GITSTATUS_STASH" $'\u235F' $'\uE133 ' $'\uF01C ' '\u'${CODEPOINT_OF_AWESOME_INBOX}' ' $'\uF01C '
# ↓
p9k::register_icon "GITSTATUS_INCOMING_CHANGES" $'\u2193' $'\uE131 ' $'\uF01A ' '\u'${CODEPOINT_OF_AWESOME_ARROW_CIRCLE_DOWN}' ' $'\uF01A '
# ↑
p9k::register_icon "GITSTATUS_OUTGOING_CHANGES" $'\u2191' $'\uE132 ' $'\uF01B ' '\u'${CODEPOINT_OF_AWESOME_ARROW_CIRCLE_UP}' ' $'\uF01B '
#
p9k::register_icon "GITSTATUS_TAG" '' $'\uE817 ' $'\uF217 ' '\u'${CODEPOINT_OF_AWESOME_TAG}' ' $'\uF02B '
#
p9k::register_icon "GITSTATUS_COMMIT" '' $'\uE821 ' $'\uF221 ' '\u'${CODEPOINT_OF_OCTICONS_GIT_COMMIT}' ' $'\uE729 '
# Hide branch icon if user wants it hidden
if [[ "${P9K_GITSTATUS_HIDE_BRANCH_ICON:-}" != "true" ]]; then
if [[ ${P9K_MODE} != 'compatible' ]]; then
#
p9k::register_icon "GITSTATUS_BRANCH" $'\uE0A0 ' $'\uE220 ' $'\uF126 ' '\u'${CODEPOINT_OF_OCTICONS_GIT_BRANCH}' ' $'\uF126 '
else
#
p9k::register_icon "GITSTATUS_BRANCH" "@ " $'\uE220 ' $'\uF126 ' '\u'${CODEPOINT_OF_OCTICONS_GIT_BRANCH}' ' $'\uF126 '
fi
fi
# → → →
p9k::register_icon "GITSTATUS_REMOTE_BRANCH" $'\u2192' $'\u2192' $'\u2192' '\u'${CODEPOINT_OF_OCTICONS_REPO_PUSH} $'\uE728 '
#
p9k::register_icon "GITSTATUS_GIT" '' $'\uE20E ' $'\uF1D3 ' '\u'${CODEPOINT_OF_AWESOME_GIT}' ' $'\uF1D3 '
#
p9k::register_icon "GITSTATUS_GITHUB" '' $'\uE20E ' $'\uF113 ' '\u'${CODEPOINT_OF_AWESOME_GITHUB_ALT}' ' $'\uF113 '
#
p9k::register_icon "GITSTATUS_BITBUCKET" '' $'\uE20E ' $'\uF171 ' '\u'${CODEPOINT_OF_AWESOME_BITBUCKET}' ' $'\uE703 '
#
p9k::register_icon "GITSTATUS_GITLAB" '' $'\uE20E ' $'\uF296 ' '\u'${CODEPOINT_OF_AWESOME_GITLAB}' ' $'\uF296 '
################################################################
# Define the actual segment
################################################################
################################################################
# Register segment
# Parameters:
# segment_name context background foreground Generic Flat/Awesome-Patched Awesome-FontConfig Awesome-Mapped-FontConfig NerdFont
p9k::register_segment "GITSTATUS" "CLEAN" "green" "${DEFAULT_COLOR}" '' '' '' '' ''
p9k::register_segment "GITSTATUS" "MODIFIED" "yellow" "${DEFAULT_COLOR}" '' '' '' '' ''
p9k::register_segment "GITSTATUS" "UNTRACKED" "green" "${DEFAULT_COLOR}" '?' $'\uE16C' $'\uF059' '\u'${CODEPOINT_OF_AWESOME_QUESTION_CIRCLE} $'\uF059'
################################################################
# Register segment default values
p9k::set_default P9K_GITSTATUS_MAX_INDEX_SIZE_DIRTY "-1"
p9k::set_default P9K_GITSTATUS_MAX_SYNC_LATENCY_SECONDS "5"
p9k::set_default P9K_GITSTATUS_SHOW_CHANGESET false
p9k::set_default P9K_GITSTATUS_CHANGESET_HASH_LENGTH 8
p9k::set_default P9K_GITSTATUS_ALWAYS_SHOW_REMOTE_BRANCH false
p9k::set_default P9K_GITSTATUS_HIDE_BRANCH_ICON false
p9k::set_default P9K_GITSTATUS_ACTIONFORMAT_FOREGROUND "001"
}
## Start the gitstatus daemon
source ${P9K_GITSTATUS_DIR:-${_P9K_INSTALLATION_DIR}/gitstatus}/gitstatus.plugin.zsh
gitstatus_start -m ${P9K_GITSTATUS_MAX_INDEX_SIZE_DIRTY} P9K
################################################################
# @description
# Displays the status of your git checkout.
##
# @args
# $1 string Alignment - left | right
# $2 integer Segment index
# $3 boolean Whether the segment should be joined
##
prompt_gitstatus() {
gitstatus_query -d ${${GIT_DIR:a}:-$PWD} -t $P9K_GITSTATUS_MAX_SYNC_LATENCY_SECONDS P9K 2>/dev/null
# Print nothing, if we are not in a repo, or if the gitstatus daemon sends a timeout
[[ ! "${VCS_STATUS_RESULT}" =~ "ok-*" && "${VCS_STATUS_RESULT}" != 'tout' ]] && return
local current_state="CLEAN"
typeset -ah segment_content
if [[ "${P9K_GITSTATUS_SHOW_CHANGESET}" == "true" ]] && (( #VCS_STATUS_COMMIT )); then
segment_content+=("${__P9K_ICONS[GITSTATUS_COMMIT]}${VCS_STATUS_COMMIT[0,$P9K_GITSTATUS_CHANGESET_HASH_LENGTH]}")
fi
local localBranch="${VCS_STATUS_LOCAL_BRANCH}"
local remoteBranch="${VCS_STATUS_REMOTE_BRANCH}"
# Strip origin from remote name
local remoteName="${VCS_STATUS_REMOTE_NAME/origin/}"
[[ -n "${remoteName}" && -n "${localBranch}" ]] && localBranch="${remoteName}/${localBranch}"
[[ -n "$localBranch" ]] && segment_content+=("${__P9K_ICONS[GITSTATUS_BRANCH]}${localBranch//\%/%%}")
# If no local branch and no remote branch was detected, we are probably in detached mode.
[[ -z "$localBranch" && -z "$remoteBranch" && "${VCS_STATUS_RESULT}" != 'tout' ]] \
&& segment_content+=("${__P9K_ICONS[GITSTATUS_BRANCH]}(detached)")
[[ "${VCS_STATUS_RESULT}" == 'tout' ]] && segment_content+=('(gitstatus timeout)')
if [[ -n "${remoteBranch}" \
&& ( \
"${P9K_GITSTATUS_ALWAYS_SHOW_REMOTE_BRANCH}" == 'true' \
|| "${remoteBranch}" != "${VCS_STATUS_LOCAL_BRANCH}" \
) ]]; then
segment_content+=("${__P9K_ICONS[GITSTATUS_REMOTE_BRANCH]}${remoteBranch//\%/%%}")
fi
(( VCS_STATUS_HAS_UNTRACKED >= 1 )) && current_state="UNTRACKED" && segment_content+=("${__P9K_ICONS[GITSTATUS_UNTRACKED]}")
(( VCS_STATUS_HAS_STAGED >= 1 )) && current_state="MODIFIED" && segment_content+=("${__P9K_ICONS[GITSTATUS_STAGED]}")
(( VCS_STATUS_HAS_UNSTAGED >= 1 )) && current_state="MODIFIED" segment_content+=("${__P9K_ICONS[GITSTATUS_UNSTAGED]}")
(( VCS_STATUS_STASHES > 0 )) && segment_content+=("${__P9K_ICONS[GITSTATUS_STASH]}${VCS_STATUS_STASHES}")
[[ -n "${VCS_STATUS_TAG}" ]] && segment_content+=("${__P9K_ICONS[GITSTATUS_TAG]}${VCS_STATUS_TAG//\%/%%}")
if (( VCS_STATUS_COMMITS_AHEAD > 0 )); then
segment_content+=("${__P9K_ICONS[GITSTATUS_OUTGOING_CHANGES]}${VCS_STATUS_COMMITS_AHEAD}")
fi
if (( VCS_STATUS_COMMITS_BEHIND > 0 )); then
segment_content+=("${__P9K_ICONS[GITSTATUS_INCOMING_CHANGES]}${VCS_STATUS_COMMITS_BEHIND}")
fi
local currentForegroundColorVar=P9K_GITSTATUS_${current_state}_FOREGROUND
(( #VCS_STATUS_ACTION )) && segment_content+=("%F{$P9K_GITSTATUS_ACTIONFORMAT_FOREGROUND}| ${VCS_STATUS_ACTION}%f%F{${(P)currentForegroundColorVar}}")
local visual_identifier="${__P9K_ICONS[GITSTATUS_GIT]}"
if [[ "$VCS_STATUS_REMOTE_URL" =~ "github" ]] then
visual_identifier=${__P9K_ICONS[GITSTATUS_GITHUB]}
elif [[ "$VCS_STATUS_REMOTE_URL" =~ "bitbucket" ]] then
visual_identifier=${__P9K_ICONS[GITSTATUS_BITBUCKET]}
elif [[ "$VCS_STATUS_REMOTE_URL" =~ "stash" ]] then
visual_identifier=${__P9K_ICONS[GITSTATUS_BITBUCKET]}
elif [[ "$VCS_STATUS_REMOTE_URL" =~ "gitlab" ]] then
visual_identifier=${__P9K_ICONS[GITSTATUS_GITLAB]}
fi
p9k::prepare_segment "${0}" "${current_state}" "${1}" "${2}" "${3}" "${(j: :)segment_content}" "" "${visual_identifier}"
}