summaryrefslogtreecommitdiff
path: root/powerlevel9k.zsh-theme
diff options
context:
space:
mode:
Diffstat (limited to 'powerlevel9k.zsh-theme')
-rwxr-xr-xpowerlevel9k.zsh-theme144
1 files changed, 7 insertions, 137 deletions
diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme
index 5da427fa..0dc15ebe 100755
--- a/powerlevel9k.zsh-theme
+++ b/powerlevel9k.zsh-theme
@@ -195,140 +195,10 @@ if [[ "$POWERLEVEL9K_HIDE_BRANCH_ICON" == true ]]; then
fi
################################################################
-# Utility functions
+# Source utility functions
################################################################
-# Exits with 0 if a variable has been previously defined (even if empty)
-# Takes the name of a variable that should be checked.
-function defined() {
- local varname="$1"
-
- typeset -p "$varname" > /dev/null 2>&1
-}
-
-# Given the name of a variable and a default value, sets the variable
-# value to the default only if it has not been defined.
-#
-# Typeset cannot set the value for an array, so this will only work
-# for scalar values.
-function set_default() {
- local varname="$1"
- local default_value="$2"
-
- defined "$varname" || typeset -g "$varname"="$default_value"
-}
-
-# Safety function for printing icons
-# Prints the named icon, or if that icon is undefined, the string name.
-function print_icon() {
- local icon_name=$1
- local ICON_USER_VARIABLE=POWERLEVEL9K_${icon_name}
- local USER_ICON=${(P)ICON_USER_VARIABLE}
- if defined "$ICON_USER_VARIABLE"; then
- echo -n "$USER_ICON"
- else
- echo -n "${icons[$icon_name]}"
- fi
-}
-
-# Converts large memory values into a human-readable unit (e.g., bytes --> GB)
-printSizeHumanReadable() {
- typeset -F 2 size
- size="$1"+0.00001
- local extension
- extension=('B' 'K' 'M' 'G' 'T' 'P' 'E' 'Z' 'Y')
- local index=1
-
- # if the base is not Bytes
- if [[ -n $2 ]]; then
- for idx in "${extension[@]}"; do
- if [[ "$2" == "$idx" ]]; then
- break
- fi
- index=$(( index + 1 ))
- done
- fi
-
- while (( (size / 1024) > 0.1 )); do
- size=$(( size / 1024 ))
- index=$(( index + 1 ))
- done
-
- echo "$size${extension[$index]}"
-}
-
-# Gets the first value out of a list of items that is not empty.
-# The items are examined by a callback-function.
-# Takes two arguments:
-# * $list - A list of items
-# * $callback - A callback function to examine if the item is
-# worthy. The callback function has access to
-# the inner variable $item.
-function getRelevantItem() {
- setopt shwordsplit # We need to split the words in $interfaces
-
- local list callback
- list=$1
- callback=$2
-
- for item in $list; do
- # The first non-empty item wins
- try=$(eval "$callback")
- if [[ -n "$try" ]]; then
- echo "$try"
- break;
- fi
- done
-}
-
-get_icon_names() {
- for key in ${(@k)icons}; do
- echo "POWERLEVEL9K_$key: ${icons[$key]}"
- done
-}
-
-# OS detection for the `os_icon` segment
-case $(uname) in
- Darwin)
- OS='OSX'
- OS_ICON=$(print_icon 'APPLE_ICON')
- ;;
- FreeBSD)
- OS='BSD'
- OS_ICON=$(print_icon 'FREEBSD_ICON')
- ;;
- OpenBSD)
- OS='BSD'
- OS_ICON=$(print_icon 'FREEBSD_ICON')
- ;;
- DragonFly)
- OS='BSD'
- OS_ICON=$(print_icon 'FREEBSD_ICON')
- ;;
- Linux)
- OS='Linux'
- OS_ICON=$(print_icon 'LINUX_ICON')
- ;;
- SunOS)
- OS='Solaris'
- OS_ICON=$(print_icon 'SUNOS_ICON')
- ;;
- *)
- OS=''
- OS_ICON=''
- ;;
-esac
-
-# Determine the correct sed parameter.
-#
-# `sed` is unfortunately not consistent across OSes when it comes to flags.
-SED_EXTENDED_REGEX_PARAMETER="-r"
-if [[ "$OS" == 'OSX' ]]; then
- local IS_BSD_SED="$(sed --version &>> /dev/null || echo "BSD sed")"
- if [[ -n "$IS_BSD_SED" ]]; then
- SED_EXTENDED_REGEX_PARAMETER="-E"
- fi
-fi
+source $(dirname "$0")/functions/power-utilities.zsh
################################################################
# Color Scheme
@@ -387,10 +257,10 @@ left_prompt_segment() {
local bg fg
[[ -n $2 ]] && bg="%K{$2}" || bg="%k"
[[ -n $3 ]] && fg="%F{$3}" || fg="%f"
- if [[ $CURRENT_BG != 'NONE' ]] && [[ "$2" != "$CURRENT_BG" ]]; then
+ if [[ $CURRENT_BG != 'NONE' ]] && ! isSameColor "$2" "$CURRENT_BG"; then
# Middle segment
echo -n "%{$bg%F{$CURRENT_BG}%}$(print_icon 'LEFT_SEGMENT_SEPARATOR')%{$fg%}$POWERLEVEL9K_WHITESPACE_BETWEEN_LEFT_SEGMENTS"
- elif [[ "$CURRENT_BG" == "$2" ]]; then
+ elif isSameColor "$CURRENT_BG" "$2"; then
# Middle segment with same color as previous segment
# We take the current foreground color as color for our
# subsegment (or the default color). This should have
@@ -411,9 +281,9 @@ left_prompt_end() {
if [[ -n $CURRENT_BG ]]; then
echo -n "%{%k%F{$CURRENT_BG}%}$(print_icon 'LEFT_SEGMENT_SEPARATOR')"
else
- echo -n "%{%k%}"
+ echo -n "%k"
fi
- echo -n "%{%f%} "
+ echo -n "%f "
CURRENT_BG=''
}
@@ -443,7 +313,7 @@ right_prompt_segment() {
[[ -n $2 ]] && bg="%K{$2}" || bg="%k"
[[ -n $3 ]] && fg="%F{$3}" || fg="%f"
- if [[ "$CURRENT_RIGHT_BG" == "$2" ]]; then
+ if isSameColor "$CURRENT_RIGHT_BG" "$2"; then
# Middle segment with same color as previous segment
# We take the current foreground color as color for our
# subsegment (or the default color). This should have