tmux-kanagawa/scripts/tmux_ram_info.sh
2023-06-17 17:01:44 -04:00

84 lines
1.9 KiB
Bash
Executable file

#!/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