2019-05-02 01:21:48 +00:00
|
|
|
|
#setopt promptsubst
|
|
|
|
|
autoload -U colors && colors # Enable colors in prompt
|
|
|
|
|
|
2020-06-23 11:31:08 +00:00
|
|
|
|
function git_prompt {
|
2019-05-02 01:21:48 +00:00
|
|
|
|
local FULL_BRANCH="$(git symbolic-ref -q HEAD 2>/dev/null || git name-rev --name-only --no-undefined --always HEAD 2>/dev/null)"
|
2020-06-23 11:31:08 +00:00
|
|
|
|
PBRANCH="$(echo $FULL_BRANCH | sed 's/refs\/heads\///')"
|
|
|
|
|
if [ -n $PBRANCH ]; then
|
2020-06-23 11:32:51 +00:00
|
|
|
|
echo -n " ${PBRANCH} "
|
2020-06-23 11:31:08 +00:00
|
|
|
|
# Are there unstaged changes in the working directory
|
|
|
|
|
local CHANGED=$(git status --porcelain --ignore-submodule -unormal 2>/dev/null | wc -l)
|
|
|
|
|
if [ $CHANGED -gt 0 ]; then
|
|
|
|
|
PCHANGED="◊"
|
|
|
|
|
fi
|
|
|
|
|
# Are we behind the origin?
|
|
|
|
|
local NUM_BEHIND="$(git log --oneline ..@{u} 2>/dev/null | wc -l | tr -d ' ' )"
|
|
|
|
|
if [ "$NUM_BEHIND" -gt 0 ]; then
|
|
|
|
|
PBEHIND="↓"
|
|
|
|
|
fi
|
|
|
|
|
# Are we ahead of the origin?
|
|
|
|
|
local NUM_AHEAD="$(git log --oneline @{u}.. 2>/dev/null | wc -l | tr -d ' ')"
|
|
|
|
|
if [ "$NUM_AHEAD" -gt 0 ]; then
|
|
|
|
|
PAHEAD="↑"
|
|
|
|
|
fi
|
2019-05-02 01:21:48 +00:00
|
|
|
|
|
2020-06-23 11:31:08 +00:00
|
|
|
|
if [[ -n $PCHANGED || -n $PAHEAD || -n $PBEHIND ]]; then
|
2020-06-23 11:32:51 +00:00
|
|
|
|
echo -n "${PCHANGED}${PBEHIND}${PAHEAD} "
|
2020-06-23 11:31:08 +00:00
|
|
|
|
fi
|
2019-05-02 01:21:48 +00:00
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-09 13:54:07 +00:00
|
|
|
|
# Truncate working directory
|
|
|
|
|
function truncated_pwd() {
|
|
|
|
|
n=$1
|
|
|
|
|
path=`current_pwd`
|
|
|
|
|
|
|
|
|
|
dirs=("${(s:/:)path}")
|
|
|
|
|
dirs_length=$#dirs
|
|
|
|
|
|
|
|
|
|
if [[ $dirs_length -ge $n ]]; then
|
|
|
|
|
((max=dirs_length - n))
|
|
|
|
|
for (( i = 1; i <= $max; i++ )); do
|
|
|
|
|
step="$dirs[$i]"
|
|
|
|
|
if [[ -z $step ]]; then
|
|
|
|
|
continue
|
|
|
|
|
fi
|
|
|
|
|
if [[ $stem =~ "^\." ]]; then
|
|
|
|
|
dirs[$i]=$step[0,2]
|
|
|
|
|
else
|
|
|
|
|
dirs[$i]=$step[0,1]
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
fi
|
|
|
|
|
echo ${(j:/:)dirs}
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-02 01:21:48 +00:00
|
|
|
|
function current_pwd {
|
2020-03-09 13:25:20 +00:00
|
|
|
|
echo $(pwd | sed -e "s,^$HOME,~,")
|
2019-05-02 01:21:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-09 13:25:20 +00:00
|
|
|
|
function check_reboot {
|
|
|
|
|
test -f /var/run/reboot-required && echo "R "
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-21 14:28:49 +00:00
|
|
|
|
PROMPT='${PR_BOLD_RED}$(check_reboot)%{$reset_color%}%m ${PR_BOLD_YELLOW}$(truncated_pwd 3)$(git_prompt)%(?.%F{magenta}.%F{red})❯%f %{$reset_color%}%'
|
2020-06-23 10:04:12 +00:00
|
|
|
|
#PROMPT='$(check_reboot)%m $(truncated_pwd 3) $(git_branch) $(git_unstaged)$(git_is_ahead)$(git_is_behind)> '
|