From 582edf200c825abbc75ec8a643b2e7ecdbd59561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tadek=20Tele=C5=BCy=C5=84ski?= Date: Thu, 17 Aug 2017 21:54:26 +0200 Subject: [PATCH] Add average choice to load extension This commit adds a functionality to choose if one wants to see 1, 5 or 15 minutes average. Resolves issue #604 --- README.md | 13 ++++++++++++- powerlevel9k.zsh-theme | 23 +++++++++++++++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9c17c2c5..9c0c3ab5 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ The segments that are currently available are: * [`ip`](#ip) - Shows the current IP address. * [`vpn`](#vpn) - Shows the current VPN IP address. * [`public_ip`](#public_ip) - Shows your public IP address. -* `load` - Your machine's load averages. +* [`load`](#load) - Your machine's load averages. * `os_icon` - Display a nice little icon, depending on your operating system. * `ram` - Show free RAM. * `root_indicator` - An indicator if the user has superuser status. @@ -482,6 +482,17 @@ segment will not be displayed. |`POWERLEVEL9K_PUBLIC_IP_METHODS`|(dig curl wget)| These methods in that order are used to refresh your IP.| |`POWERLEVEL9K_PUBLIC_IP_NONE`|None|The string displayed when an IP was not obtained| +##### load + +Displays one of your load averages with appropriate state coloring. The thresholds are: +- `0.7 * NUM_CORES <`: critical +- `0.5 * NUM_CORES <`: warning +- `less`: normal + +| Variable | Default Value | Description | +|----------|---------------|-------------| +|`POWERLEVEL9K_LOAD_WHICH`|5|Which average to show. Possible values: 1, 5 or 15| + ##### newline Puts a newline in your prompt so you can continue using segments on the next diff --git a/powerlevel9k.zsh-theme b/powerlevel9k.zsh-theme index 3c34f0bb..b03a9374 100755 --- a/powerlevel9k.zsh-theme +++ b/powerlevel9k.zsh-theme @@ -937,6 +937,8 @@ prompt_load() { local current_state="unknown" local cores + set_default POWERLEVEL9K_LOAD_WHICH 5 + typeset -AH load_states load_states=( 'critical' 'red' @@ -945,31 +947,40 @@ prompt_load() { ) if [[ "$OS" == "OSX" ]] || [[ "$OS" == "BSD" ]]; then - load_avg_1min=$(sysctl vm.loadavg | grep -o -E '[0-9]+(\.|,)[0-9]+' | head -n 1) + + if [[ "$POWERLEVEL9K_LOAD_WHICH" -eq 1 ]]; then + load_avg=$(sysctl vm.loadavg | grep -o -E '[0-9]+(\.|,)[0-9]+' | head -n 3 | sed -n 1p) + elif [[ "$POWERLEVEL9K_LOAD_WHICH" -eq 5 ]]; then + load_avg=$(sysctl vm.loadavg | grep -o -E '[0-9]+(\.|,)[0-9]+' | head -n 3 | sed -n 2p) + else + load_avg=$(sysctl vm.loadavg | grep -o -E '[0-9]+(\.|,)[0-9]+' | head -n 3 | sed -n 3p) + fi + if [[ "$OS" == "OSX" ]]; then cores=$(sysctl -n hw.logicalcpu) else cores=$(sysctl -n hw.ncpu) fi else - load_avg_1min=$(grep -o "[0-9.]*" /proc/loadavg | head -n 1) + load_avg=$(grep -o "[0-9.]*" /proc/loadavg | head -n 1) cores=$(nproc) fi # Replace comma - load_avg_1min=${load_avg_1min//,/.} + load_avg=${load_avg//,/.} - if [[ "$load_avg_1min" -gt $(bc -l <<< "${cores} * 0.7") ]]; then + if [[ "$load_avg" -gt $(bc -l <<< "${cores} * 0.7") ]]; then current_state="critical" - elif [[ "$load_avg_1min" -gt $(bc -l <<< "${cores} * 0.5") ]]; then +elif [[ "$load_avg" -gt $(bc -l <<< "${cores} * 0.5") ]]; then current_state="warning" else current_state="normal" fi - "$1_prompt_segment" "${0}_${current_state}" "$2" "${load_states[$current_state]}" "$DEFAULT_COLOR" "$load_avg_1min" 'LOAD_ICON' + "$1_prompt_segment" "${0}_${current_state}" "$2" "${load_states[$current_state]}" "$DEFAULT_COLOR" "$load_avg" 'LOAD_ICON' } + # Node version prompt_node_version() { local node_version=$(node -v 2>/dev/null)