aboutsummaryrefslogtreecommitdiff
path: root/functions/utilities.zsh
diff options
context:
space:
mode:
authorBen Hilburn <bhilburn@gmail.com>2015-11-13 20:47:17 +0300
committerBen Hilburn <bhilburn@gmail.com>2015-11-13 20:47:17 +0300
commit2e8f00342ab6818066ff4616d47b8b009083bceb (patch)
tree6d4fc392b31dbe0197c80aec0ff0dfb3c0dcc19c /functions/utilities.zsh
parent0ff3b3660ededd90027277119130fa08b330df42 (diff)
parent538d8b8fa8b4fbfe4fdcab6e57867d1e6b434c5a (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.zsh120
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