diff options
author | Ben Hilburn <bhilburn@gmail.com> | 2015-11-13 20:47:17 +0300 |
---|---|---|
committer | Ben Hilburn <bhilburn@gmail.com> | 2015-11-13 20:47:17 +0300 |
commit | 2e8f00342ab6818066ff4616d47b8b009083bceb (patch) | |
tree | 6d4fc392b31dbe0197c80aec0ff0dfb3c0dcc19c /functions/utilities.zsh | |
parent | 0ff3b3660ededd90027277119130fa08b330df42 (diff) | |
parent | 538d8b8fa8b4fbfe4fdcab6e57867d1e6b434c5a (diff) |
Merge pull request #112 from dritter/color_detection
Moved many sub-functions out of main theme file. Also improved color detection.
Diffstat (limited to 'functions/utilities.zsh')
-rw-r--r-- | functions/utilities.zsh | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/functions/utilities.zsh b/functions/utilities.zsh new file mode 100644 index 00000000..80a38977 --- /dev/null +++ b/functions/utilities.zsh @@ -0,0 +1,120 @@ +# vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8 +################################################################ +# Utility functions +# This file holds some utility-functions for +# the powerlevel9k-ZSH-theme +# https://github.com/bhilburn/powerlevel9k +################################################################ + +# 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" +} + +# 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 +} + +# 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 |