aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbuisse <buisse@cs.chalmers.se>2007-06-10 11:02:28 +0200
committerbuisse <buisse@cs.chalmers.se>2007-06-10 11:02:28 +0200
commit01b0fd3eabaed0af06cec2cfd5b15523564f6afe (patch)
tree7b13cee513184b2556385ab938f6e5e7ef9b939e
parent5797243207b6ba43b0e1960a02b768229900208b (diff)
downloadXMonadContrib-01b0fd3eabaed0af06cec2cfd5b15523564f6afe.tar.gz
XMonadContrib-01b0fd3eabaed0af06cec2cfd5b15523564f6afe.tar.xz
XMonadContrib-01b0fd3eabaed0af06cec2cfd5b15523564f6afe.zip
Modified xmonad-clock.c to display battery information from ACPI (will work only on linux though). Also restored three load averages instead of only one.
darcs-hash:20070610090228-aa886-fa9c4d9607491e1a39759c68a2410c98604909bb.gz
-rw-r--r--scripts/xmonad-acpi.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/xmonad-acpi.c b/scripts/xmonad-acpi.c
new file mode 100644
index 0000000..a047d53
--- /dev/null
+++ b/scripts/xmonad-acpi.c
@@ -0,0 +1,82 @@
+/*
+
+dwm/xmonad status bar provider. launch from your .xinitrc, and pipe
+into dzen2.
+
+to compile: gcc -Os -s -o xmonad-acpi xmonad-acpi.c
+
+Copyright (c) 2007, Tom Menari <tom dot menari at googlemail dot com>
+Copyright (c) 2007, Don Stewart
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <signal.h>
+
+/* configuration */
+#define REFRESH_RATE 2
+#define TIME_FORMAT "%a %b %d %H:%M:%S"
+#define BATTERY_INFO "/proc/acpi/battery/BAT0/info"
+#define BATTERY_STATE "/proc/acpi/battery/BAT0/state"
+
+int main(void) {
+ FILE *acpi;
+ char b[34];
+ time_t epochtime;
+ struct tm *realtime;
+ int last_full, remaining;
+
+ double load[3];
+
+ signal(SIGPIPE, SIG_IGN);
+
+ if ((acpi = fopen(BATTERY_INFO, "r")) == NULL) {
+ perror("couldn't open "BATTERY_INFO);
+ exit(-1);
+ }
+ while (fgets(b, sizeof(b), acpi))
+ if (sscanf(b, "last full capacity: %d", &last_full) == 1)
+ break;
+ fclose(acpi);
+
+ for(;;) {
+ /* Load */
+ getloadavg(load, 3);
+
+ /* Battery */
+ if ((acpi = fopen(BATTERY_STATE, "r")) == NULL) {
+ perror("couldn't open "BATTERY_STATE);
+ exit(-1);
+ }
+ while (fgets(b, sizeof(b), acpi))
+ if (sscanf(b, "remaining capacity: %d", &remaining) == 1)
+ break;
+ fclose(acpi);
+
+ /* Time */
+ epochtime = time(NULL);
+ realtime = localtime(&epochtime);
+ strftime(b, sizeof(b), TIME_FORMAT, realtime);
+
+
+ fprintf(stdout, "%s | %.2f %.2f %.2f | %.1f%% \n", b, load[0], load[1],
+ load[2], (float) (remaining * 100) / last_full);
+ fflush(stdout);
+ sleep(REFRESH_RATE);
+ }
+ return EXIT_SUCCESS;
+}