From fdbb4f3bd7a651834904d0446303b10a76a6e349 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Sun, 14 Feb 2021 18:59:26 +0100 Subject: update --- .zsh-powerline.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 .zsh-powerline.sh (limited to '.zsh-powerline.sh') diff --git a/.zsh-powerline.sh b/.zsh-powerline.sh new file mode 100644 index 0000000..f0835a4 --- /dev/null +++ b/.zsh-powerline.sh @@ -0,0 +1,80 @@ +# Colorscheme +readonly COLOR_CWD='blue' +readonly COLOR_GIT='cyan' +readonly COLOR_SUCCESS='green' +readonly COLOR_FAILURE='red' +readonly COLOR_TIME='cyan' + +readonly SYMBOL_GIT_BRANCH='⑂' +readonly SYMBOL_GIT_MODIFIED='*' +readonly SYMBOL_GIT_PUSH='↑' +readonly SYMBOL_GIT_PULL='↓' +readonly PS_SYMBOL='$' + +_git_info() { + hash git 2>/dev/null || return # git not found + + # get current branch + local ref=$(git symbolic-ref --short HEAD 2>/dev/null) + + if [[ -n "$ref" ]]; then + # prepend branch symbol + ref=$SYMBOL_GIT_BRANCH$ref + else + # get most recent tag or abbreviated unique hash + ref=$(git describe --tags --always 2>/dev/null) + fi + + [[ -n "$ref" ]] || return # not a git repo + + local marks + + # scan first two lines of output from `git status` + while IFS= read -r line; do + if [[ $line =~ ^## ]]; then # header line + [[ $line =~ ahead\ ([0-9]+) ]] && marks+=" $SYMBOL_GIT_PUSH$match[1]" + [[ $line =~ behind\ ([0-9]+) ]] && marks+=" $SYMBOL_GIT_PULL$match[1]" + else # branch is modified if output contains more lines after the header line + marks="$SYMBOL_GIT_MODIFIED$marks" + break + fi + done < <(git status --porcelain --branch 2>/dev/null) # note the space between the two < + + # print without a trailing newline + printf " $ref$marks" +} + + +_config_prompt() { + # Color coding based on exit code of the previous command. Note this must + # be dealt with in the beginning of the function, otherwise the $? will not + # match the right command executed. + + if [[ $? -eq 0 ]]; then + local symbol="%F{$COLOR_SUCCESS}$PS_SYMBOL%f" + else + local symbol="%F{$COLOR_FAILURE}$PS_SYMBOL%f" + fi + + local cwd="%F{$COLOR_CWD}%~%f" + local git="%F{$COLOR_GIT}$(_git_info)%f" + local time="%F{$COLOR_TIME}%D{%H:%M:%S}%f" + + PROMPT="$cwd$git $symbol " + RPROMPT="$time" +} + + +# useful zsh hook functions + +precmd() { # run before each prompt + _config_prompt +} + + +preexec() { # run after user command is read and about to execute +} + + +chpwd() { # run when changing current working directory +} -- cgit v1.2.3