#!/usr/bin/env bash # setting the locale, some users have issues with different locales, this forces the correct one export LC_ALL=en_US.UTF-8 current_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source $current_dir/utils.sh kb_to_mb() { if [ $# == 0 ]; then read num else num="$1" fi bc <<< "scale=3;$num/1024" } kb_to_gb() { if [ $# == 0 ]; then read num else num="$1" fi bc <<< "scale=6;$num/1048576" } round() { if [ $# == 1 ]; then read num scale="$1" elif [ $# == 2 ]; then num="$1" scale="$2" fi printf "%.${scale}f" "${num}" } get_tmux_ram_usage() { local pid="$(tmux display-message -pF '#{pid}')" local total_mem_kb=0 case $(uname -s) in Linux) local pids="$(pstree -p $pid | tr -d '\n' | sed -rn -e 's/[^()]*\(([0-9]+)\)[^()]*/\1,/g' -e 's/,$//p')" total_mem_kb="$(ps -o rss= -p "$pids" | paste -sd+ | bc)" ;; Darwin) local pids="$(pstree $pid | sed -En 's/[^0-9]+([0-9]+) .*/\1/p' | tr '\n' ',')" total_mem_kb="$(ps -o rss= -p "$pids" | paste -sd+ - | bc)" ;; FreeBSD) # TODO check FreeBSD compatibility local pids="$(pstree $pid | sed -En 's/[^0-9]+([0-9]+) .*/\1/p' | tr '\n' ',')" total_mem_kb="$(ps -o rss= -p "$pids" | paste -sd+ - | bc)" ;; CYGWIN*|MINGW32*|MSYS*|MINGW*) # TODO - windows compatability ;; esac local total_mem_mb=$(echo "$total_mem_kb" | kb_to_mb | round 0) local total_mem_gb=$(echo "$total_mem_kb" | kb_to_gb | round 0) if (( $total_mem_gb > 0)); then echo "${total_mem_gb}GB" elif (( $total_mem_mb > 0 )); then echo "${total_mem_mb}MB" else echo "${total_mem_kb}kB" fi } main() { # storing the refresh rate in the variable RATE, default is 5 RATE=$(get_tmux_option "@dracula-refresh-rate" 5) ram_label=$(get_tmux_option "@dracula-tmux-ram-usage-label" "MEM") ram_usage=$(get_tmux_ram_usage) echo "$ram_label $ram_usage" } #run main driver main