# $Id$
+2006-12-12
+ * Split battery variable into two:
+ battery, e.g. "charging 75%" and
+ battery_time, e.g. "3h 15m".
+
2006-12-11
* Close pop3/imap sockets.
* Fix outstanding battery issues.
battery (num)
- Remaining capacity in ACPI or APM battery. ACPI battery number
- can be given as argument (default is BAT0).
+ Battery status and remaining percentage capacity of ACPI or APM
+ battery. ACPI battery number can be given as argument (default
+ is BAT0).
+
+
+ battery_time (num)
+ Battery charge/discharge time remaining of ACPI battery. ACPI
+ battery number can be given as argument (default is BAT0).
bmpx_artist
dnl
AC_ARG_ENABLE([own_window],
- AC_HELP_STRING([--enable-own-window], [enable if you want support for creating own window [[default=yes]]]),
+ AC_HELP_STRING([--enable-own-window], [enable if you want support for creating own window @<:@default=yes@:>@]),
[dah="$enableval"], [dah=yes])
if test $dah != "no"; then
dnl
AC_ARG_ENABLE([proc_uptime],
- AC_HELP_STRING([--enable-proc-uptime], [enable using /proc/uptime for uptime [[default=yes]]]),
+ AC_HELP_STRING([--enable-proc-uptime], [enable using /proc/uptime for uptime @<:@default=yes@:>@]),
[dah="$enableval"], [dah=yes])
if test $dah = "yes"; then
dnl
AC_ARG_ENABLE([audacious],
- AC_HELP_STRING([--enable-audacious], [enable audacious player support [[default=no]]]),
+ AC_HELP_STRING([--enable-audacious], [enable audacious player support @<:@default=no@:>@]),
[want_audacious="$enableval"], [want_audacious=no])
AM_CONDITIONAL(BUILD_AUDACIOUS, test x$want_audacious = xyes)
dnl
AC_ARG_ENABLE([bmpx],
- AC_HELP_STRING([--enable-bmpx], [enable if you want BMPx support [[default=no]]]),
+ AC_HELP_STRING([--enable-bmpx], [enable if you want BMPx support @<:@default=no@:>@]),
[want_bmpx="$enableval"], [want_bmpx=no])
AM_CONDITIONAL(BUILD_BMPX, test x$want_bmpx = xyes)
dnl
AC_ARG_ENABLE([hddtemp],
- AC_HELP_STRING([--enable-hddtemp], [enable if you want hddtemp support [[default=yes]]]),
+ AC_HELP_STRING([--enable-hddtemp], [enable if you want hddtemp support @<:@default=yes@:>@]),
[want_hddtemp="$enableval"], [want_hddtemp=yes])
AM_CONDITIONAL(BUILD_HDDTEMP, test x$want_hddtemp = xyes)
dnl
AC_ARG_ENABLE([mpd],
- AC_HELP_STRING([--enable-mpd], [enable if you want MPD support [[default=yes]]]),
+ AC_HELP_STRING([--enable-mpd], [enable if you want MPD support @<:@default=yes@:>@]),
[want_mpd="$enableval"], [want_mpd=yes])
AM_CONDITIONAL(BUILD_MPD, test x$want_mpd = xyes)
dnl
AC_ARG_ENABLE([xmms2],
- AC_HELP_STRING([--enable-xmms2], [enable if you want XMMS2 support [[default=no]]]),
+ AC_HELP_STRING([--enable-xmms2], [enable if you want XMMS2 support @<:@default=no@:>@]),
[want_xmms2="$enableval"], [want_xmms2=no])
AM_CONDITIONAL(BUILD_XMMS2, test x$want_xmms2 = xyes)
dnl
AC_ARG_ENABLE([portmon],
- AC_HELP_STRING([--enable-portmon], [enable if you want tcp (ip4) port monitoring [[default=yes]]]),
+ AC_HELP_STRING([--enable-portmon], [enable if you want tcp (ip4) port monitoring @<:@default=yes@:>@]),
[want_portmon="$enableval"], [want_portmon=yes])
AM_CONDITIONAL(BUILD_PORT_MONITORS, test x$want_portmon = xyes)
if test x$want_portmon = xyes; then
- AC_CHECK_HEADERS([netdb.h netinet/in.h netinet/tcp.h sys/socket.h arpa/inet.h], [],
- [PORT_MONITORS_MISSING=yes])
- if test "x$PORT_MONITORS_MISSING" = xyes; then
- AC_MSG_ERROR([missing a needed network header for port monitoring])
- fi
- PKG_CHECK_MODULES([GLIB], [glib-2.0])
- CFLAGS="$CFLAGS $GLIB_CFLAGS"
- LIBS="$LIBS $GLIB_LIBS"
- AC_DEFINE(TCP_PORT_MONITOR, 1, [Define if you want tcp port monitoring support])
+ if test "x$uname" != xLinux; then
+ AC_MSG_NOTICE([port monitors not supported on $uname... disabling])
+ want_portmon=no
+ else
+ AC_CHECK_HEADERS([netdb.h netinet/in.h netinet/tcp.h sys/socket.h arpa/inet.h], [],
+ [PORT_MONITORS_MISSING=yes])
+ if test "x$PORT_MONITORS_MISSING" = xyes; then
+ AC_MSG_ERROR([missing a needed network header for port monitoring])
+ fi
+ PKG_CHECK_MODULES([GLIB], [glib-2.0])
+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
+ LIBS="$LIBS $GLIB_LIBS"
+ AC_DEFINE(TCP_PORT_MONITOR, 1, [Define if you want tcp port monitoring support])
+ fi
fi
dnl
AC_ARG_ENABLE([debug],
- AC_HELP_STRING([--enable-debug], [compile with debug symbols [[default=no]]]),
+ AC_HELP_STRING([--enable-debug], [compile with debug symbols @<:@default=no@:>@]),
[want_debug="$enableval"], [want_debug=no])
if test "x$want_debug" = "xyes" -a $ac_cv_c_compiler_gnu != no; then
dnl
AC_ARG_ENABLE([x11],
- AC_HELP_STRING([--enable-x11], [enable if you want X11 support [[default=yes]]]),
+ AC_HELP_STRING([--enable-x11], [enable if you want X11 support @<:@default=yes@:>@]),
[want_x11="$enableval"], [want_x11=yes])
AM_CONDITIONAL(BUILD_X11, test x$want_x11 = xyes)
dnl
AC_ARG_ENABLE([double_buffer],
- AC_HELP_STRING([--enable-double-buffer], [enable for flicker-free operation [[default=yes]]]),
+ AC_HELP_STRING([--enable-double-buffer], [enable for flicker-free operation @<:@default=yes@:>@]),
[want_double_buffer="$enableval"], [want_double_buffer=yes])
if test "x$want_double_buffer" = "xyes"; then
dnl
AC_ARG_ENABLE([xdamage],
- AC_HELP_STRING([--enable-xdamage], [enable if you want Xdamage support [[default=yes]]]),
+ AC_HELP_STRING([--enable-xdamage], [enable if you want Xdamage support @<:@default=yes@:>@]),
[want_xdamage="$enableval"], [want_xdamage=yes])
if test "x$want_xdamage" = "xyes"; then
dnl
AC_ARG_ENABLE([xft],
- AC_HELP_STRING([--enable-xft], [enable if you want to use Xft [[default=yes]]]),
+ AC_HELP_STRING([--enable-xft], [enable if you want to use Xft @<:@default=yes@:>@]),
[want_xft="$enableval"], [want_xft=yes])
if test x$want_xft = "xyes"; then
.TP
\fB\*(T<\fBbattery\fR\*(T>\fR \*(T<\fB(num)\fR\*(T>
-Remaining capacity in ACPI or APM battery. ACPI battery number can be given as argument (default is BAT0).
+Battery status and remaining percentage capacity of ACPI or APM battery. ACPI battery number can be given as argument (default is BAT0).
+
+.TP
+\fB\*(T<\fBbattery_time\fR\*(T>\fR \*(T<\fB(num)\fR\*(T>
+Battery charge/discharge time remaining of ACPI battery. ACPI battery number can be given as argument (default is BAT0).
.TP
\fB\*(T<\fBbmpx_artist\fR\*(T>\fR
<option>(num)</option>
</term>
<listitem>
- Remaining capacity in ACPI or APM battery. ACPI battery number can be given as argument (default is BAT0).
+ Battery status and remaining percentage capacity of ACPI or APM battery. ACPI battery number can be given as argument (default is BAT0).
+ <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>
+ <command><option>battery_time</option></command>
+ <option>(num)</option>
+ </term>
+ <listitem>
+ Battery charge/discharge time remaining of ACPI battery. ACPI battery number can be given as argument (default is BAT0).
<para></para></listitem>
</varlistentry>
color green "\<(alignment|background|border_margin|border_width|cpu_avg_samples|default_color|default_shade_color|default_outline_color|double_buffer|draw_borders|draw_graph_borders|draw_shades|draw_outline|font|gap_x|gap_y|imap|mail_spool|max_port_monitor_connections|max_specials|max_user_text|maximum_width|minimum_size|mpd_host|mpd_port|mpd_password|net_avg_samples|no_buffers|out_to_console|override_utf8_locale|own_window|own_window_transparent|own_window_type|own_window_hints|own_window_colour|pad_percents|pop3|stippled_borders|total_run_times|update_interval|uppercase|use_spacer|use_xft|wm_class_name|xftalpha|xftfont)\>"
## Variables
-color brightblue "\<(acpiacadapter|acpifan|acpitemp|acpitempf|addr|adt746xcpu|adt746xfan|align|alignr|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|color|colour|cpu|cpubar|diskio|downspeed|downspeedf|else|entropy_avail|entropy_bar|entropy_poolsize|exec|execbar|execgraph|execi|execibar|execigraph|font|freq|freq_dyn|freq_dyn_g|freq_g|fs_bar|fs_free|fs_free_perc|fs_size|fs_used|goto|hddtemp|head|hr|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_cpu_tempf|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|if_existing|if_running|if_mounted|kernel|linkstatus|loadavg|machine|mails|mem|membar|memmax|memperc|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_smart|mpd_status|mpd_title|mpd_vol|new_mails|nodename|offset|outlinecolor|pre_exec|processes|running_processes|shadecolor|stippled_hr|swap|swapbar|swapmax|swapperc|sysname|tab|tail|tcp_portmon|texeci|time|top|top_mem|totaldown|totalup|tztime|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|voffset|voltage_mv|voltage_v)\>"
+color brightblue "\<(acpiacadapter|acpifan|acpitemp|acpitempf|addr|adt746xcpu|adt746xfan|align|alignr|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|battery_time|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|color|colour|cpu|cpubar|diskio|downspeed|downspeedf|else|entropy_avail|entropy_bar|entropy_poolsize|exec|execbar|execgraph|execi|execibar|execigraph|font|freq|freq_dyn|freq_dyn_g|freq_g|fs_bar|fs_free|fs_free_perc|fs_size|fs_used|goto|hddtemp|head|hr|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_cpu_tempf|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|if_existing|if_running|if_mounted|kernel|linkstatus|loadavg|machine|mails|mem|membar|memmax|memperc|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_smart|mpd_status|mpd_title|mpd_vol|new_mails|nodename|offset|outlinecolor|pre_exec|processes|running_processes|shadecolor|stippled_hr|swap|swapbar|swapmax|swapperc|sysname|tab|tail|tcp_portmon|texeci|time|top|top_mem|totaldown|totalup|tztime|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|voffset|voltage_mv|voltage_v)\>"
color brightblue "\$\{?[0-9A-Z_!@#$*?-]+\}?"
color cyan "(\{|\}|\(|\)|\;|\]|\[|`|\\|\$|<|>|!|=|&|\|)"
color brightred "^TEXT$"
\ audacious_status
\ audacious_title
\ battery
+ \ battery_time
\ bmpx_album
\ bmpx_artist
\ bmpx_bitrate
OBJ_acpitemp,
OBJ_acpitempf,
OBJ_battery,
+ OBJ_battery_time,
OBJ_buffers,
OBJ_cached,
OBJ_color,
case OBJ_battery:
free(objs[i].data.s);
break;
-
+ case OBJ_battery_time:
+ free(objs[i].data.s);
+ break;
case OBJ_execi:
free(objs[i].data.execi.cmd);
free(objs[i].data.execi.buffer);
else
strcpy(bat, "BAT0");
obj->data.s = strdup(bat);
+ END OBJ(battery_time, 0);
+ char bat[64];
+ if (arg)
+ sscanf(arg, "%63s", bat);
+ else
+ strcpy(bat, "BAT0");
+ obj->data.s = strdup(bat);
#if defined(__linux__)
END OBJ(i8k_version, INFO_I8K)
END OBJ(i8k_bios, INFO_I8K)
get_acpi_ac_adapter(p, p_max_size);
}
OBJ(battery) {
- get_battery_stuff(p, p_max_size, obj->data.s);
+ get_battery_stuff(p, p_max_size, obj->data.s, BATTERY_STATUS);
+ }
+ OBJ(battery_time) {
+ get_battery_stuff(p, p_max_size, obj->data.s, BATTERY_TIME);
}
OBJ(buffers) {
human_readable(cur->buffers * 1024, p, 255);
};
+/* get_battery_stuff() item selector */
+enum {
+ BATTERY_STATUS,
+ BATTERY_TIME
+};
+
#ifdef MPD
#include "libmpdclient.h"
#endif
double get_acpi_temperature(int fd);
void get_acpi_ac_adapter( char *, size_t );
void get_acpi_fan( char *, size_t );
-void get_battery_stuff(char *buf, unsigned int n, const char *bat);
+void get_battery_stuff(char *buf, unsigned int n, const char *bat, int item);
void get_ibm_acpi_fan(char *buf, size_t client_buffer_size);
void get_ibm_acpi_temps(void);
void get_ibm_acpi_volume(char *buf, size_t client_buffer_size);
}
void
-get_battery_stuff(char *buf, unsigned int n, const char *bat)
+get_battery_stuff(char *buf, unsigned int n, const char *bat, int item)
{
int battime, batcapacity, batstate, ac;
+ char battery_status[64];
+ char battery_time[64];
if (GETSYSCTL("hw.acpi.battery.time", battime))
(void) fprintf(stderr,
"Cannot read sysctl \"hw.acpi.acline\"\n");
if (batstate == 1) {
- if (battime != -1)
+ if (battime != -1) {
+ snprintf (battery_status, sizeof(battery_status)-1,
+ "remaining %d%%", batcapacity);
+ snprintf (battery_time, sizeof(battery_time)-1,
+ "%d:%2.2d", battime / 60, battime % 60);
+ /*
snprintf(buf, n, "remaining %d%% (%d:%2.2d)",
batcapacity, battime / 60, battime % 60);
+ */
+ }
else
/* no time estimate available yet */
+ snprintf(battery_status, sizeof(battery_status)-1,
+ "remaining %d%%", batcapacity);
+ /*
snprintf(buf, n, "remaining %d%%",
batcapacity);
+ */
if (ac == 1)
(void) fprintf(stderr, "Discharging while on AC!\n");
} else {
+ snprintf (battery_status, sizeof(battery_status)-1,
+ batstate == 2 ? "charging (%d%%)" : "charged (%d%%)", batcapacity);
+ /*
snprintf(buf, n, batstate == 2 ? "charging (%d%%)" : "charged (%d%%)", batcapacity);
+ */
if (batstate != 2 && batstate != 0)
- (void) fprintf(stderr, "Unknow battery state %d!\n", batstate);
+ (void) fprintf(stderr, "Unknown battery state %d!\n", batstate);
if (ac == 0)
(void) fprintf(stderr, "Charging while not on AC!\n");
}
+ switch (item) {
+ case BATTERY_STATUS:
+ {
+ snprintf(buf, n, "%s", battery_status);
+ break;
+ }
+ case BATTERY_TIME:
+ {
+ snprintf(buf, n, "%s", battery_time);
+ break;
+ }
+ default:
+ break;
+ }
+ return;
}
int
case REMOTEHOST:
- p_hostent = gethostbyaddr( &p_monitor->p_peek[ connection_index ]->remote_addr,
+ p_hostent = gethostbyaddr( (const char *)&p_monitor->p_peek[ connection_index ]->remote_addr,
sizeof(in_addr_t), AF_INET);
/* if no host name found, just use ip address. */
if ( !p_hostent || !p_hostent->h_name )
case LOCALHOST:
- p_hostent = gethostbyaddr( &p_monitor->p_peek[ connection_index ]->local_addr,
+ p_hostent = gethostbyaddr( (const char *)&p_monitor->p_peek[ connection_index ]->local_addr,
sizeof(in_addr_t), AF_INET);
/* if no host name found, just use ip address. */
if ( !p_hostent || !p_hostent->h_name )
#ifndef LIBTCP_PORTMON_H
#define LIBTCP_PORTMON_H
+#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
static int acpi_last_full;
-static char last_battery_str[64];
+static char last_battery_str[64]; /* e.g. "charging 75%" */
+static char last_battery_time_str[64]; /* e.g. "3h 15m" */
static double last_battery_time;
-void get_battery_stuff(char *buf, unsigned int n, const char *bat)
+void get_battery_stuff(char *buf, unsigned int n, const char *bat, int item)
{
static int rep, rep2;
char acpi_path[128];
- char tmp_battery[64], tmp_time_left[64];
snprintf(acpi_path, 127, ACPI_BATTERY_BASE_PATH "/%s/state", bat);
/* don't update battery too often */
- if (current_update_time - last_battery_time < 29.5) {
- snprintf(buf, n, "%s", last_battery_str);
- return;
- }
+ if (current_update_time - last_battery_time < 29.5)
+ goto set_return_value;
+
last_battery_time = current_update_time;
+ memset (last_battery_str, 0, sizeof (last_battery_str));
+ memset (last_battery_time_str, 0, sizeof (last_battery_time_str));
+
/* first try ACPI */
if (acpi_bat_fp == NULL && apm_bat_fp == NULL)
else if (strcmp(charging_state, "charging") == 0) {
if (acpi_last_full != 0 && present_rate > 0) {
/* e.g. charging 75% */
- snprintf(tmp_battery, sizeof(tmp_battery)-1, "charging %i%%",
+ snprintf(last_battery_str, sizeof(last_battery_str)-1, "charging %i%%",
(int) ((remaining_capacity * 100) / acpi_last_full));
/* e.g. 2h 37m */
- format_seconds(tmp_time_left, sizeof(tmp_time_left)-1,
+ format_seconds(last_battery_time_str, sizeof(last_battery_time_str)-1,
(long) (((acpi_last_full - remaining_capacity) * 3600) /
present_rate));
- /* e.g. charging 75% (2h 37m) */
- snprintf (last_battery_str, sizeof(last_battery_str)-1,
- "%s (%s)", tmp_battery, tmp_time_left);
-
} else if (acpi_last_full != 0 && present_rate <= 0) {
snprintf(last_battery_str, sizeof(last_battery_str)-1, "charging %d%%",
(int) ((remaining_capacity * 100) / acpi_last_full));
else if (strncmp(charging_state, "discharging", 64) == 0) {
if (present_rate > 0) {
/* e.g. discharging 35% */
- snprintf(tmp_battery, sizeof(tmp_battery)-1, "discharging %i%%",
+ snprintf(last_battery_str, sizeof(last_battery_str)-1, "discharging %i%%",
(int) ((remaining_capacity * 100) / acpi_last_full));
/* e.g. 1h 12m */
- format_seconds(tmp_time_left, sizeof(tmp_time_left)-1,
+ format_seconds(last_battery_time_str, sizeof(last_battery_time_str)-1,
(long) ((remaining_capacity * 3600) / present_rate));
- /* e.g. discharging 35% (1h 12m) */
- snprintf (last_battery_str, sizeof(last_battery_str)-1,
- "%s (%s)", tmp_battery, tmp_time_left);
} else if (present_rate == 0) { /* Thanks to Nexox for this one */
snprintf(last_battery_str, sizeof(last_battery_str)-1, "full");
} else {
}
}
- snprintf(buf, n, "%s", last_battery_str);
+set_return_value:
+ switch (item) {
+ case BATTERY_STATUS:
+ {
+ snprintf(buf, n, "%s", last_battery_str);
+ break;
+ }
+ case BATTERY_TIME:
+ {
+ snprintf(buf, n, "%s", last_battery_time_str);
+ break;
+ }
+ default:
+ break;
+ }
+ return;
}
/* On Apple powerbook and ibook:
return -1;
}
-void get_battery_stuff(char *buf, unsigned int n, const char *bat)
+void get_battery_stuff(char *buf, unsigned int n, const char *bat, int item)
{
}