1
0
Fork 0
mirror of https://github.com/romkatv/powerlevel10k.git synced 2024-11-25 13:30:07 +00:00

Merge @dritter's icon customization work.

This commit is contained in:
Ben Hilburn 2015-08-19 12:14:21 -07:00
commit 96a830d2a1
2 changed files with 170 additions and 170 deletions

View file

@ -49,6 +49,7 @@ this theme focus on four primary goals:
- [Double-Lined Prompt](#double-lined-prompt) - [Double-Lined Prompt](#double-lined-prompt)
- [Disable Right Prompt](#disable-right-prompt) - [Disable Right Prompt](#disable-right-prompt)
- [Light Color Theme](#light-color-theme) - [Light Color Theme](#light-color-theme)
- [Icon Customization](#icon-customization)
- [Segment Color Customization](#segment-color-customization) - [Segment Color Customization](#segment-color-customization)
- [Special Segment Colors](#special-segment-colors) - [Special Segment Colors](#special-segment-colors)
- [Troubleshooting](#troubleshooting) - [Troubleshooting](#troubleshooting)
@ -383,6 +384,24 @@ Light'](https://github.com/altercation/solarized) users. Check it out:
![](http://bhilburn.org/content/images/2015/03/solarized-light.png) ![](http://bhilburn.org/content/images/2015/03/solarized-light.png)
#### Icon Customization
Each icon used can be customized too by specifying a variable named like
the icon and prefixed with 'POWERLEVEL9K'. If you want to use another icon
as segment separators, you can easily do that:
POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR=$'\uE0B1'
POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR=$'\uE0B3'
You could get a list of all icons defined in random colors, by adding the
special segment `icons_test` to your prompt:
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(icons_test)
This special prompt does not work on the right side, as it would be too long,
and ZSH hides it automatically. Also have in mind, that the output depends on
your `POWERLEVEL9K_MODE` settings.
#### Segment Color Customization #### Segment Color Customization
For each segment in your prompt, you can specify a foreground and background For each segment in your prompt, you can specify a foreground and background

View file

@ -44,163 +44,133 @@
#zstyle ':vcs_info:*+*:*' debug true #zstyle ':vcs_info:*+*:*' debug true
#set -o xtrace #set -o xtrace
# The `CURRENT_BG` variable is used to remember what the last BG color used was ################################################################
# when building the left-hand prompt. Because the RPROMPT is created from # Icons
# right-left but reads the opposite, this isn't necessary for the other side. ################################################################
CURRENT_BG='NONE'
# These characters require the Powerline fonts to work properly. If see boxes or # These characters require the Powerline fonts to work properly. If see boxes or
# bizarre characters below, your fonts are not correctly installed. If you # bizarre characters below, your fonts are not correctly installed. If you
# do not want to install a special font, you can set `POWERLEVEL9K_MODE` to # do not want to install a special font, you can set `POWERLEVEL9K_MODE` to
# `compatible`. This shows all icons in regular symbols. # `compatible`. This shows all icons in regular symbols.
typeset -gAH icons
case $POWERLEVEL9K_MODE in case $POWERLEVEL9K_MODE in
'flat') 'flat'|'awesome-patched')
# Awesome-Patched Font required! # Awesome-Patched Font required!
# See https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched # See https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched
LEFT_SEGMENT_SEPARATOR='' icons=(
RIGHT_SEGMENT_SEPARATOR='' LEFT_SEGMENT_SEPARATOR "\UE0B0" # 
ROOT_ICON="\UE801" #  RIGHT_SEGMENT_SEPARATOR "\UE0B2" # 
RUBY_ICON="\UE847" #  ROOT_ICON "\UE801" # 
AWS_ICON="\UE895" #  RUBY_ICON "\UE847" # 
BACKGROUND_JOBS_ICON="\UE82F " #  AWS_ICON "\UE895" # 
TEST_ICON="\UE891" #  BACKGROUND_JOBS_ICON "\UE82F " # 
OK_ICON="\U2713" # ✓ TEST_ICON "\UE891" # 
FAIL_ICON="\U2718" # ✘ OK_ICON "\U2713" # ✓
SYMFONY_ICON="SF" FAIL_ICON "\U2718" # ✘
APPLE_ICON=$'\UF8FF' #  SYMFONY_ICON "SF"
FREEBSD_ICON=$'\U1F608 ' # 😈 NODE_ICON $'\U2B22' # ⬢
LINUX_ICON=$'\U1F427 ' # 🐧 MULTILINE_FIRST_PROMPT_PREFIX $'\U256D'$'\U2500'
SUNOS_ICON=$'\U1F31E ' # 🌞 MULTILINE_SECOND_PROMPT_PREFIX $'\U2570'$'\U2500 '
VCS_UNTRACKED_ICON="\UE16C" #  APPLE_ICON $'\UF8FF' # 
VCS_UNSTAGED_ICON="\UE17C" #  FREEBSD_ICON $'\U1F608 ' # 😈
VCS_STAGED_ICON="\UE168" #  LINUX_ICON $'\U1F427 ' # 🐧
VCS_STASH_ICON="\UE133 " #  SUNOS_ICON $'\U1F31E ' # 🌞
#VCS_INCOMING_CHANGES="\UE1EB " #  VCS_UNTRACKED_ICON "\UE16C" # 
#VCS_INCOMING_CHANGES="\UE80D " #  VCS_UNSTAGED_ICON "\UE17C" # 
VCS_INCOMING_CHANGES="\UE131 " #  VCS_STAGED_ICON "\UE168" # 
#VCS_OUTGOING_CHANGES="\UE1EC " #  VCS_STASH_ICON "\UE133 " # 
#VCS_OUTGOING_CHANGES="\UE80E " #  #VCS_INCOMING_CHANGES "\UE1EB " # 
VCS_OUTGOING_CHANGES="\UE132 " #  #VCS_INCOMING_CHANGES "\UE80D " # 
VCS_TAG_ICON="\UE817 " #  VCS_INCOMING_CHANGES "\UE131 " # 
VCS_BOOKMARK_ICON="\UE87B" #  #VCS_OUTGOING_CHANGES "\UE1EC " # 
VCS_COMMIT_ICON="\UE821 " #  #VCS_OUTGOING_CHANGES "\UE80E " # 
VCS_BRANCH_ICON=$'\UE220' #  VCS_OUTGOING_CHANGES "\UE132 " # 
VCS_REMOTE_BRANCH_ICON=" \UE804 " #  VCS_TAG_ICON "\UE817 " # 
VCS_GIT_ICON="\UE20E " #  VCS_BOOKMARK_ICON "\UE87B" # 
VCS_HG_ICON="\UE1C3 " #  VCS_COMMIT_ICON "\UE821 " # 
;; VCS_BRANCH_ICON $'\UE220' # 
'compatible') VCS_REMOTE_BRANCH_ICON " \UE804 " # 
LEFT_SEGMENT_SEPARATOR="\u2B80" # ⮀ VCS_GIT_ICON "\UE20E " # 
RIGHT_SEGMENT_SEPARATOR="\u2B82" # ⮂ VCS_HG_ICON "\UE1C3 " # 
ROOT_ICON="\u26A1" # ⚡ )
RUBY_ICON=''
AWS_ICON="AWS:"
BACKGROUND_JOBS_ICON="\u2699" # ⚙
TEST_ICON=''
OK_ICON="\u2713" # ✓
FAIL_ICON="\u2718" # ✘
SYMFONY_ICON="SF"
APPLE_ICON='OSX'
FREEBSD_ICON='BSD'
LINUX_ICON='Lx'
SUNOS_ICON='Sun'
VCS_UNTRACKED_ICON='?'
VCS_UNSTAGED_ICON="\u25CF" # ●
VCS_STAGED_ICON="\u271A" # ✚
VCS_STASH_ICON="\u235F" # ⍟
VCS_INCOMING_CHANGES="\u2193" # ↓
VCS_OUTGOING_CHANGES="\u2191" # ↑
VCS_TAG_ICON=''
VCS_BOOKMARK_ICON="\u263F" # ☿
VCS_COMMIT_ICON=''
VCS_BRANCH_ICON='@'
VCS_REMOTE_BRANCH_ICON="\u2192" # →
VCS_GIT_ICON='Git'
VCS_HG_ICON='HG'
;;
'awesome-patched')
# Awesome-Patched Font required!
# See https://github.com/gabrielelana/awesome-terminal-fonts/tree/patching-strategy/patched
LEFT_SEGMENT_SEPARATOR="\UE0B0" # 
RIGHT_SEGMENT_SEPARATOR="\UE0B2" # 
ROOT_ICON="\U26A1" # ⚡
RUBY_ICON="\UE847" # 
AWS_ICON="\UE895" # 
BACKGROUND_JOBS_ICON="\UE82F " # 
TEST_ICON="\UE891" # 
OK_ICON="\U2713" # ✓
FAIL_ICON="\U2718" # ✘
SYMFONY_ICON="SF"
APPLE_ICON=$'\UF8FF' # 
FREEBSD_ICON=$'\U1F608 ' # 😈
LINUX_ICON=$'\U1F427 ' # 🐧
SUNOS_ICON=$'\U1F31E ' # 🌞
VCS_UNTRACKED_ICON="\UE16C" # 
VCS_UNSTAGED_ICON="\UE17C" # 
VCS_STAGED_ICON="\UE168" # 
VCS_STASH_ICON="\UE133 " # 
#VCS_INCOMING_CHANGES="\UE1EB " # 
#VCS_INCOMING_CHANGES="\UE80D " # 
VCS_INCOMING_CHANGES="\UE131 " # 
#VCS_OUTGOING_CHANGES="\UE1EC " # 
#VCS_OUTGOING_CHANGES="\UE80E " # 
VCS_OUTGOING_CHANGES="\UE132 " # 
VCS_TAG_ICON="\UE817 " # 
VCS_BOOKMARK_ICON="\UE87B" # 
VCS_COMMIT_ICON="\UE821 " # 
VCS_BRANCH_ICON=$'\UE220' # 
VCS_REMOTE_BRANCH_ICON=" \UE804 " # 
VCS_GIT_ICON="\UE20E " # 
VCS_HG_ICON="\UE1C3 " # 
;; ;;
*) *)
# Powerline-Patched Font required! # Powerline-Patched Font required!
# See https://github.com/Lokaltog/powerline-fonts # See https://github.com/Lokaltog/powerline-fonts
LEFT_SEGMENT_SEPARATOR="\uE0B0" #  icons=(
RIGHT_SEGMENT_SEPARATOR="\uE0B2" #  LEFT_SEGMENT_SEPARATOR "\UE0B0" # 
ROOT_ICON="\u26A1" # ⚡ RIGHT_SEGMENT_SEPARATOR "\UE0B2" # 
RUBY_ICON='' ROOT_ICON "\U26A1" # ⚡
AWS_ICON="AWS:" RUBY_ICON ''
BACKGROUND_JOBS_ICON="\u2699" # ⚙ AWS_ICON "AWS:"
TEST_ICON='' BACKGROUND_JOBS_ICON "\U2699" # ⚙
OK_ICON="\u2713" # ✓ TEST_ICON ''
FAIL_ICON="\u2718" # ✘ OK_ICON "\U2713" # ✓
SYMFONY_ICON="SF" FAIL_ICON "\U2718" # ✘
APPLE_ICON='OSX' SYMFONY_ICON "SF"
FREEBSD_ICON='BSD' NODE_ICON $'\U2B22' # ⬢
LINUX_ICON='Lx' MULTILINE_FIRST_PROMPT_PREFIX $'\U256D'$'\U2500'
SUNOS_ICON='Sun' MULTILINE_SECOND_PROMPT_PREFIX $'\U2570'$'\U2500 '
VCS_UNTRACKED_ICON='?' APPLE_ICON 'OSX'
VCS_UNSTAGED_ICON="\u25CF" # ● FREEBSD_ICON 'BSD'
VCS_STAGED_ICON="\u271A" # ✚ LINUX_ICON 'Lx'
VCS_STASH_ICON="\u235F" # ⍟ SUNOS_ICON 'Sun'
VCS_INCOMING_CHANGES="\u2193" # ↓ VCS_UNTRACKED_ICON '?'
VCS_OUTGOING_CHANGES="\u2191" # ↑ VCS_UNSTAGED_ICON "\U25CF" # ●
VCS_TAG_ICON='' VCS_STAGED_ICON "\U271A" # ✚
VCS_BOOKMARK_ICON="\u263F" # ☿ VCS_STASH_ICON "\U235F" # ⍟
VCS_COMMIT_ICON='' VCS_INCOMING_CHANGES "\U2193" # ↓
VCS_BRANCH_ICON="\uE0A0 " #  VCS_OUTGOING_CHANGES "\U2191" # ↑
VCS_REMOTE_BRANCH_ICON="\u2192" # → VCS_TAG_ICON ''
VCS_GIT_ICON="" VCS_BOOKMARK_ICON "\U263F" # ☿
VCS_HG_ICON="" VCS_COMMIT_ICON ''
VCS_BRANCH_ICON "\UE0A0 " # 
VCS_REMOTE_BRANCH_ICON "\U2192" # →
VCS_GIT_ICON ""
VCS_HG_ICON ""
)
;; ;;
esac esac
# OS detection for the `os_icon` segment # Second switch for overrides
case $(uname) in case $POWERLEVEL9K_MODE in
Darwin) OS_ICON=$APPLE_ICON ;; 'flat')
FreeBSD) OS_ICON=$FREEBSD_ICON ;; icons[LEFT_SEGMENT_SEPARATOR]=''
OpenBSD) OS_ICON=$FREEBSD_ICON ;; icons[RIGHT_SEGMENT_SEPARATOR]=''
DragonFly) OS_ICON=$FREEBSD_ICON ;; ;;
Linux) OS_ICON=$LINUX_ICON ;; 'compatible')
SunOS) OS_ICON=$SUNOS_ICON ;; icons[LEFT_SEGMENT_SEPARATOR]="\U2B80" # ⮀
*) OS_ICON='' ;; icons[RIGHT_SEGMENT_SEPARATOR]="\U2B82" # ⮂
icons[VCS_BRANCH_ICON]='@'
;;
esac esac
if [[ "$POWERLEVEL9K_HIDE_BRANCH_ICON" == true ]]; then if [[ "$POWERLEVEL9K_HIDE_BRANCH_ICON" == true ]]; then
VCS_BRANCH_ICON='' icons[VCS_BRANCH_ICON]=''
fi fi
function print_icon() {
local icon_name=$1
local ICON_USER_VARIABLE=POWERLEVEL9K_${icon_name}
local USER_ICON=${(P)ICON_USER_VARIABLE}
if [[ -n "$USER_ICON" ]]; then
echo -n $USER_ICON
else
echo -n ${icons[$icon_name]}
fi
}
# OS detection for the `os_icon` segment
case $(uname) in
"Darwin") OS_ICON=$(print_icon 'APPLE_ICON') ;;
"FreeBSD") OS_ICON=$(print_icon 'FREEBSD_ICON') ;;
"OpenBSD") OS_ICON=$(print_icon 'FREEBSD_ICON') ;;
"DragonFly") OS_ICON=$(print_icon 'FREEBSD_ICON') ;;
"Linux") OS_ICON=$(print_icon 'LINUX_ICON') ;;
"SunOS") OS_ICON=$(print_icon 'SUNOS_ICON') ;;
*) OS_ICON='' ;;
esac
################################################################ ################################################################
# color scheme # color scheme
################################################################ ################################################################
@ -242,26 +212,26 @@ if [[ "$POWERLEVEL9K_SHOW_CHANGESET" == true ]]; then
VCS_CHANGESET_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH" VCS_CHANGESET_HASH_LENGTH="$POWERLEVEL9K_CHANGESET_HASH_LENGTH"
fi fi
VCS_CHANGESET_PREFIX="%F{$VCS_FOREGROUND_COLOR_DARK}$VCS_COMMIT_ICON%0.$VCS_CHANGESET_HASH_LENGTH""i%f " VCS_CHANGESET_PREFIX="%F{$VCS_FOREGROUND_COLOR_DARK}$(print_icon 'VCS_COMMIT_ICON')%0.$VCS_CHANGESET_HASH_LENGTH""i%f "
fi fi
zstyle ':vcs_info:*' enable git hg zstyle ':vcs_info:*' enable git hg
zstyle ':vcs_info:*' check-for-changes true zstyle ':vcs_info:*' check-for-changes true
VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%F{$VCS_FOREGROUND_COLOR}%b%c%u%m%f" VCS_DEFAULT_FORMAT="$VCS_CHANGESET_PREFIX%F{$VCS_FOREGROUND_COLOR}%b%c%u%m%f"
zstyle ':vcs_info:git:*' formats "%F{$VCS_FOREGROUND_COLOR}$VCS_GIT_ICON%f$VCS_DEFAULT_FORMAT" zstyle ':vcs_info:git:*' formats "%F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_GIT_ICON')%f$VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:hg:*' formats "%F{$VCS_FOREGROUND_COLOR}$VCS_HG_ICON%f$VCS_DEFAULT_FORMAT" zstyle ':vcs_info:hg:*' formats "%F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_HG_ICON')%f$VCS_DEFAULT_FORMAT"
zstyle ':vcs_info:*' actionformats " %b %F{red}| %a%f" zstyle ':vcs_info:*' actionformats " %b %F{red}| %a%f"
zstyle ':vcs_info:*' stagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_STAGED_ICON%f" zstyle ':vcs_info:*' stagedstr " %F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_STAGED_ICON')%f"
zstyle ':vcs_info:*' unstagedstr " %F{$VCS_FOREGROUND_COLOR}$VCS_UNSTAGED_ICON%f" zstyle ':vcs_info:*' unstagedstr " %F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_UNSTAGED_ICON')%f"
zstyle ':vcs_info:git*+set-message:*' hooks vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname zstyle ':vcs_info:git*+set-message:*' hooks vcs-detect-changes git-untracked git-aheadbehind git-stash git-remotebranch git-tagname
zstyle ':vcs_info:hg*+set-message:*' hooks vcs-detect-changes zstyle ':vcs_info:hg*+set-message:*' hooks vcs-detect-changes
# For Hg, only show the branch name # For Hg, only show the branch name
zstyle ':vcs_info:hg*:*' branchformat "$VCS_BRANCH_ICON%b" zstyle ':vcs_info:hg*:*' branchformat "$(print_icon 'VCS_BRANCH_ICON')%b"
# The `get-revision` function must be turned on for dirty-check to work for Hg # The `get-revision` function must be turned on for dirty-check to work for Hg
zstyle ':vcs_info:hg*:*' get-revision true zstyle ':vcs_info:hg*:*' get-revision true
zstyle ':vcs_info:hg*:*' get-bookmarks true zstyle ':vcs_info:hg*:*' get-bookmarks true
@ -275,6 +245,11 @@ fi
# Prompt Segment Constructors # Prompt Segment Constructors
################################################################ ################################################################
# The `CURRENT_BG` variable is used to remember what the last BG color used was
# when building the left-hand prompt. Because the RPROMPT is created from
# right-left but reads the opposite, this isn't necessary for the other side.
CURRENT_BG='NONE'
# Begin a left prompt segment # Begin a left prompt segment
# Takes four arguments: # Takes four arguments:
# * $1: Name of the function that was orginally invoked (mandatory). # * $1: Name of the function that was orginally invoked (mandatory).
@ -304,7 +279,7 @@ left_prompt_segment() {
[[ -n $3 ]] && fg="%F{$3}" || fg="%f" [[ -n $3 ]] && fg="%F{$3}" || fg="%f"
if [[ $CURRENT_BG != 'NONE' && $2 != $CURRENT_BG ]]; then if [[ $CURRENT_BG != 'NONE' && $2 != $CURRENT_BG ]]; then
# Middle segment # Middle segment
echo -n "%{$bg%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR%{$fg%} " echo -n "%{$bg%F{$CURRENT_BG}%}$(print_icon 'LEFT_SEGMENT_SEPARATOR')%{$fg%} "
else else
# First segment # First segment
echo -n "%{$bg%}%{$fg%} " echo -n "%{$bg%}%{$fg%} "
@ -316,7 +291,7 @@ left_prompt_segment() {
# End the left prompt, closing any open segments # End the left prompt, closing any open segments
left_prompt_end() { left_prompt_end() {
if [[ -n $CURRENT_BG ]]; then if [[ -n $CURRENT_BG ]]; then
echo -n "%{%k%F{$CURRENT_BG}%}$LEFT_SEGMENT_SEPARATOR" echo -n "%{%k%F{$CURRENT_BG}%}$(print_icon 'LEFT_SEGMENT_SEPARATOR')"
else else
echo -n "%{%k%}" echo -n "%{%k%}"
fi fi
@ -346,7 +321,7 @@ right_prompt_segment() {
local bg fg local bg fg
[[ -n $2 ]] && bg="%K{$2}" || bg="%k" [[ -n $2 ]] && bg="%K{$2}" || bg="%k"
[[ -n $3 ]] && fg="%F{$3}" || fg="%f" [[ -n $3 ]] && fg="%F{$3}" || fg="%f"
echo -n "%f%F{$2}$RIGHT_SEGMENT_SEPARATOR%f%{$bg%}%{$fg%} " echo -n "%f%F{$2}$(print_icon 'RIGHT_SEGMENT_SEPARATOR')%f%{$bg%}%{$fg%} "
[[ -n $4 ]] && echo -n "$4 " [[ -n $4 ]] && echo -n "$4 "
} }
@ -370,7 +345,7 @@ prompt_vcs() {
function +vi-git-untracked() { function +vi-git-untracked() {
if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' && \ if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' && \
-n $(git ls-files --others --exclude-standard | sed q) ]]; then -n $(git ls-files --others --exclude-standard | sed q) ]]; then
hook_com[unstaged]+=" %F{$VCS_FOREGROUND_COLOR}$VCS_UNTRACKED_ICON%f" hook_com[unstaged]+=" %F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_UNTRACKED_ICON')%f"
fi fi
} }
@ -400,12 +375,12 @@ function +vi-git-remotebranch() {
remote=${$(git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/} remote=${$(git rev-parse --verify HEAD@{upstream} --symbolic-full-name 2>/dev/null)/refs\/(remotes|heads)\/}
branch_name=${$(git symbolic-ref --short HEAD 2>/dev/null)} branch_name=${$(git symbolic-ref --short HEAD 2>/dev/null)}
hook_com[branch]="%F{$VCS_FOREGROUND_COLOR}$VCS_BRANCH_ICON${hook_com[branch]}%f" hook_com[branch]="%F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_BRANCH_ICON')${hook_com[branch]}%f"
# Always show the remote # Always show the remote
#if [[ -n ${remote} ]] ; then #if [[ -n ${remote} ]] ; then
# Only show the remote if it differs from the local # Only show the remote if it differs from the local
if [[ -n ${remote} && ${remote#*/} != ${branch_name} ]] ; then if [[ -n ${remote} && ${remote#*/} != ${branch_name} ]] ; then
hook_com[branch]+="%F{$VCS_FOREGROUND_COLOR}$VCS_REMOTE_BRANCH_ICON%f%F{$VCS_FOREGROUND_COLOR}${remote// /}%f" hook_com[branch]+="%F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_REMOTE_BRANCH_ICON')%f%F{$VCS_FOREGROUND_COLOR}${remote// /}%f"
fi fi
} }
@ -413,7 +388,7 @@ function +vi-git-tagname() {
local tag local tag
tag=$(git describe --tags --exact-match HEAD 2>/dev/null) tag=$(git describe --tags --exact-match HEAD 2>/dev/null)
[[ -n "${tag}" ]] && hook_com[branch]=" %F{$VCS_FOREGROUND_COLOR}$VCS_TAG_ICON${tag}%f" [[ -n "${tag}" ]] && hook_com[branch]=" %F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_TAG_ICON')${tag}%f"
} }
# Show count of stashed changes # Show count of stashed changes
@ -423,13 +398,13 @@ function +vi-git-stash() {
if [[ -s $(git rev-parse --git-dir)/refs/stash ]] ; then if [[ -s $(git rev-parse --git-dir)/refs/stash ]] ; then
stashes=$(git stash list 2>/dev/null | wc -l) stashes=$(git stash list 2>/dev/null | wc -l)
hook_com[misc]+=" %F{$VCS_FOREGROUND_COLOR}$VCS_STASH_ICON${stashes// /}%f" hook_com[misc]+=" %F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_STASH_ICON')${stashes// /}%f"
fi fi
} }
function +vi-hg-bookmarks() { function +vi-hg-bookmarks() {
if [[ -n "${hgbmarks[@]}" ]]; then if [[ -n "${hgbmarks[@]}" ]]; then
hook_com[hg-bookmark-string]=" %F{$VCS_FOREGROUND_COLOR}$VCS_BOOKMARK_ICON${hgbmarks[@]}%f" hook_com[hg-bookmark-string]=" %F{$VCS_FOREGROUND_COLOR}$(print_icon 'VCS_BOOKMARK_ICON')${hgbmarks[@]}%f"
# And to signal, that we want to use the sting we just generated, # And to signal, that we want to use the sting we just generated,
# set the special variable `ret' to something other than the default # set the special variable `ret' to something other than the default
@ -461,7 +436,7 @@ prompt_aws() {
local aws_profile="$AWS_DEFAULT_PROFILE" local aws_profile="$AWS_DEFAULT_PROFILE"
if [[ -n "$aws_profile" ]]; if [[ -n "$aws_profile" ]];
then then
$1_prompt_segment "$0" red white "$AWS_ICON $aws_profile" $1_prompt_segment "$0" red white "$(print_icon 'AWS_ICON') $aws_profile"
fi fi
} }
@ -494,6 +469,16 @@ prompt_history() {
$1_prompt_segment "$0" "244" "$DEFAULT_COLOR" '%h' $1_prompt_segment "$0" "244" "$DEFAULT_COLOR" '%h'
} }
prompt_icons_test() {
for key in "${(@k)icons}"; do
# The lower color spectrum in ZSH makes big steps. Choosing
# the next color has enough contrast to read.
local random_color=$((RANDOM % 8))
local next_color=$((random_color+1))
$1_prompt_segment "$0" "$random_color" "$next_color" "$key: ${icons[$key]}"
done
}
# Right Status: (return code, root status, background jobs) # Right Status: (return code, root status, background jobs)
# This creates a status segment for the *right* prompt. Exact same thing as # This creates a status segment for the *right* prompt. Exact same thing as
# above - just other side. # above - just other side.
@ -505,12 +490,12 @@ prompt_longstatus() {
symbols+="%F{226}%? ↵" symbols+="%F{226}%? ↵"
bg="009" bg="009"
else else
symbols+="%{%F{"046"}%}$OK_ICON" symbols+="%{%F{"046"}%}$(print_icon 'OK_ICON')"
bg="008" bg="008"
fi fi
[[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $ROOT_ICON" [[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $(print_icon 'ROOT_ICON')"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$BACKGROUND_JOBS_ICON" [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$(print_icon 'BACKGROUND_JOBS_ICON')"
[[ -n "$symbols" ]] && $1_prompt_segment "$0" "$bg" "$DEFAULT_COLOR" "$symbols" [[ -n "$symbols" ]] && $1_prompt_segment "$0" "$bg" "$DEFAULT_COLOR" "$symbols"
} }
@ -519,9 +504,8 @@ prompt_longstatus() {
prompt_node_version() { prompt_node_version() {
local nvm_prompt=$(node -v 2>/dev/null) local nvm_prompt=$(node -v 2>/dev/null)
[[ -z "${nvm_prompt}" ]] && return [[ -z "${nvm_prompt}" ]] && return
NODE_ICON=$'\U2B22' # ⬢
$1_prompt_segment "$0" "green" "white" "${nvm_prompt:1} $NODE_ICON" $1_prompt_segment "$0" "green" "white" "${nvm_prompt:1} $(print_icon 'NODE_ICON')"
} }
# print a little OS icon # print a little OS icon
@ -542,7 +526,7 @@ prompt_rspec_stats() {
local code_amount=$(ls -1 app/**/*.rb | wc -l) local code_amount=$(ls -1 app/**/*.rb | wc -l)
local tests_amount=$(ls -1 spec/**/*.rb | wc -l) local tests_amount=$(ls -1 spec/**/*.rb | wc -l)
build_test_stats "$1" $0 "$code_amount" $tests_amount "RSpec $TEST_ICON" build_test_stats "$1" $0 "$code_amount" $tests_amount "RSpec $(print_icon 'TEST_ICON')"
fi fi
} }
@ -551,7 +535,7 @@ prompt_rvm() {
local rvm_prompt local rvm_prompt
rvm_prompt=`rvm-prompt` rvm_prompt=`rvm-prompt`
if [ "$rvm_prompt" != "" ]; then if [ "$rvm_prompt" != "" ]; then
$1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$rvm_prompt $RUBY_ICON " $1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$rvm_prompt $(print_icon 'RUBY_ICON') "
fi fi
} }
@ -560,9 +544,9 @@ prompt_rvm() {
prompt_status() { prompt_status() {
local symbols local symbols
symbols=() symbols=()
[[ "$RETVAL" -ne 0 ]] && symbols+="%{%F{red}%}$FAIL_ICON" [[ "$RETVAL" -ne 0 ]] && symbols+="%{%F{red}%}$(print_icon 'FAIL_ICON')"
[[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $ROOT_ICON" [[ "$UID" -eq 0 ]] && symbols+="%{%F{yellow}%} $(print_icon 'ROOT_ICON')"
[[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$BACKGROUND_JOBS_ICON" [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}$(print_icon 'BACKGROUND_JOBS_ICON')"
[[ -n "$symbols" ]] && $1_prompt_segment "$0" "$DEFAULT_COLOR" "default" "$symbols" [[ -n "$symbols" ]] && $1_prompt_segment "$0" "$DEFAULT_COLOR" "default" "$symbols"
} }
@ -573,7 +557,7 @@ prompt_symfony2_tests() {
local code_amount=$(ls -1 src/**/*.php | grep -v Tests | wc -l) local code_amount=$(ls -1 src/**/*.php | grep -v Tests | wc -l)
local tests_amount=$(ls -1 src/**/*.php | grep Tests | wc -l) local tests_amount=$(ls -1 src/**/*.php | grep Tests | wc -l)
build_test_stats "$1" "$0" "$code_amount" "$tests_amount" "SF2 $TEST_ICON" build_test_stats "$1" "$0" "$code_amount" "$tests_amount" "SF2 $(print_icon 'TEST_ICON')"
fi fi
} }
@ -581,7 +565,7 @@ prompt_symfony2_tests() {
prompt_symfony2_version() { prompt_symfony2_version() {
if [[ -f app/bootstrap.php.cache ]]; then if [[ -f app/bootstrap.php.cache ]]; then
local symfony2_version=$(grep " VERSION " app/bootstrap.php.cache | sed -e 's/[^.0-9]*//g') local symfony2_version=$(grep " VERSION " app/bootstrap.php.cache | sed -e 's/[^.0-9]*//g')
$1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$SYMFONY_ICON $symfony2_version" $1_prompt_segment "$0" "240" "$DEFAULT_COLOR" "$(print_icon 'SYMFONY_ICON') $symfony2_version"
fi fi
} }
@ -664,11 +648,8 @@ powerlevel9k_init() {
add-zsh-hook precmd vcs_info add-zsh-hook precmd vcs_info
if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then if [[ "$POWERLEVEL9K_PROMPT_ON_NEWLINE" == true ]]; then
[[ -n $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX ]] || POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="╭─" PROMPT="$(print_icon 'MULTILINE_FIRST_PROMPT_PREFIX')%{%f%b%k%}"'$(build_left_prompt)'"
[[ -n $POWERLEVEL9K_MULTILINE_SECOND_PROMPT_PREFIX ]] || POWERLEVEL9K_MULTILINE_SECOND_PROMPT_PREFIX="╰─ " $(print_icon 'MULTILINE_SECOND_PROMPT_PREFIX')"
PROMPT="$POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX%{%f%b%k%}"'$(build_left_prompt)'"
$POWERLEVEL9K_MULTILINE_SECOND_PROMPT_PREFIX"
# The right prompt should be on the same line as the first line of the left # The right prompt should be on the same line as the first line of the left
# prompt. To do so, there is just a quite ugly workaround: Before zsh draws # prompt. To do so, there is just a quite ugly workaround: Before zsh draws
# the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we # the RPROMPT, we advise it, to go one line up. At the end of RPROMPT, we