====== tmux Battery Meter ======
I spend most of my time working from a terminal within a tmux session. When on my laptop it's nice to have instant visual access to my battery charge and if I'm on AC or not.
I wrote a little program that provides the battery's percent charge and shows a + if on AC and a - if running off the battery.
Amazingly enough, this is called tmux_bat_meter.
===== Building =====
This thing is pretty damn simple. To build it:
gcc tmux_bat_meter.c -o tmux_bat_meter
===== Using =====
To use this in tmux, plunk the compiled binary in your path add this to your tmux.conf:
set -g status-right '#(tmux_bat_meter) #[fg=blue]%H:%M#[default]'
This puts tmux_bat_meter in the right hand part of the status bar. See below for a screenshot.
===== Screenshot =====
{{:tmux_bat_meter.png?direct&600|}}
===== Source =====
#include
#include
#include
#define AC_PATH "/sys/class/power_supply/AC/online"
#define BAT_FULL "/sys/class/power_supply/BAT0/energy_full"
#define BAT_NOW "/sys/class/power_supply/BAT0/energy_now"
#define BAT_FULL2 "/sys/class/power_supply/BAT0/charge_full"
#define BAT_NOW2 "/sys/class/power_supply/BAT0/charge_now"
int main(void)
{
unsigned int ac;
float bat_full, bat_now;
FILE *fp;
/* are we on AC? */
fp = fopen(AC_PATH, "r");
fscanf(fp, "%d", &ac);
fclose(fp);
/* get current charge and max charge */
if ( (! (fp = fopen( BAT_FULL, "r"))) &&
(! (fp = fopen(BAT_FULL2, "r"))) )
{
fprintf(stderr, "Could not open BAT_FULL/2\n");
return(1);
}
fscanf(fp, "%f", &bat_full);
fclose(fp);
if ( (! (fp = fopen( BAT_NOW, "r"))) &&
(! (fp = fopen(BAT_NOW2, "r"))) )
{
fprintf(stderr, "Could not open BAT_NOW/2\n");
return(2);
}
fscanf(fp, "%f", &bat_now);
fclose(fp);
printf("%c%2.0f%%", ac ? '+' : '-', (bat_now * 100) / bat_full);
return(0);
}