Add support for xmobar

Use i3status-xmobar | xmobar -o -t "%StdinReader%" -c "[Run StdinReader]"
You might need to copy the default configuration to ~/.xmobarrc
This commit is contained in:
Michael Stapelberg 2009-08-18 21:29:44 +02:00
parent 56312001de
commit bb52b40c8e
7 changed files with 53 additions and 12 deletions

View File

@ -13,7 +13,7 @@ CFLAGS+=-D_GNU_SOURCE
endif
# Define this if you want i3status to spit out dzen2-compatible output on stdout
CFLAGS+=-DDZEN
#CFLAGS+=-DDZEN
CFLAGS+=$(EXTRA_CFLAGS)
src/%.o: src/%.c

5
debian/rules vendored
View File

@ -16,6 +16,10 @@ build-stamp:
# Build with wmii support
$(MAKE)
cp $(CURDIR)/i3status $(CURDIR)/i3status-wmii
# Build with xmobar support
$(MAKE) distclean
$(MAKE) EXTRA_CFLAGS="-DXMOBAR"
cp $(CURDIR)/i3status $(CURDIR)/i3status-xmobar
# Build with dzen support
$(MAKE) distclean
$(MAKE) EXTRA_CFLAGS="-DDZEN"
@ -36,6 +40,7 @@ install: build
dh_installdirs
$(MAKE) DESTDIR=$(CURDIR)/debian/i3status/ install
install -m 755 $(CURDIR)/i3status-wmii $(CURDIR)/debian/i3status/usr/bin/i3status-wmii
install -m 755 $(CURDIR)/i3status-xmobar $(CURDIR)/debian/i3status/usr/bin/i3status-xmobar
dh_link usr/share/man/man1/i3status.1 usr/share/man/man1/i3status-wmii.1
# Build architecture-independent files here.

View File

@ -136,10 +136,10 @@ int main(int argc, char *argv[]) {
for (i = 0; i < num_run_watches; i += 2) {
bool running = process_runs(run_watches[i+1]);
if (use_colors)
snprintf(part, sizeof(part), "%s%s: %s",
snprintf(part, sizeof(part), "%s%s: %s%s",
(running ? color("#00FF00") : color("#FF0000")),
run_watches[i],
(running ? "yes" : "no"));
(running ? "yes" : "no"), endcolor());
else snprintf(part, sizeof(part), "%s: %s", run_watches[i], (running ? "yes" : "no"));
snprintf(pathbuf, sizeof(pathbuf), "%d%s", order[ORDER_RUN], run_watches[i]);
write_to_statusbar(pathbuf, part, false);

View File

@ -5,7 +5,11 @@
#include "queue.h"
#define BAR "^fg(#333333)^p(5;-2)^ro(2)^p()^fg()^p(5)"
#ifdef DZEN
#define BAR "^fg(#333333)^p(5;-2)^ro(2)^p()^fg()^p(5)"
#elif XMOBAR
#define BAR "<fc=#333333> | </fc>"
#endif
#define BEGINS_WITH(haystack, needle) (strncmp(haystack, needle, strlen(needle)) == 0)
#define max(a, b) (a > b ? a : b)
@ -55,6 +59,7 @@ bool slurp(char *filename, char *destination, int size);
/* src/output.c */
void write_error_to_statusbar(const char *message);
char *color(const char *colorstr);
char *endcolor() __attribute__ ((pure));
void cleanup_rbar_dir();
/* src/config.c */

View File

@ -4,6 +4,7 @@
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <glob.h>
#include "i3status.h"
@ -80,7 +81,7 @@ int load_configuration(const char *configfile) {
interval = atoi(dest_value);
OPT("wmii_path")
{
#ifndef DZEN
#if !defined(DZEN) && !defined(XMOBAR)
static glob_t globbuf;
struct stat stbuf;
if (glob(dest_value, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
@ -139,7 +140,7 @@ int load_configuration(const char *configfile) {
}
fclose(handle);
#ifndef DZEN
#if !defined(DZEN) && !defined(XMOBAR)
if (wmii_path == NULL)
exit(EXIT_FAILURE);
#endif

View File

@ -34,10 +34,10 @@ const char *get_wireless_info() {
continue;
if ((quality == UCHAR_MAX) || (quality == 0)) {
if (use_colors)
(void)snprintf(part, sizeof(part), "%sW: down", color("#FF0000"));
(void)snprintf(part, sizeof(part), "%sW: down%s", color("#FF0000"), endcolor());
else (void)snprintf(part, sizeof(part), "W: down");
} else (void)snprintf(part, sizeof(part), "%sW: (%03d%%) %s",
color("#00FF00"), quality, get_ip_addr(wlan_interface));
} else (void)snprintf(part, sizeof(part), "%sW: (%03d%%) %s%s",
color("#00FF00"), quality, get_ip_addr(wlan_interface), endcolor());
return part;
}

View File

@ -28,18 +28,32 @@ char *color(const char *colorstr) {
static char colorbuf[32];
#ifdef DZEN
(void)snprintf(colorbuf, sizeof(colorbuf), "^fg(%s)", colorstr);
#elif XMOBAR
(void)snprintf(colorbuf, sizeof(colorbuf), "<fc=%s>", colorstr);
#else
(void)snprintf(colorbuf, sizeof(colorbuf), "%s %s ", colorstr, wmii_normcolors);
#endif
return colorbuf;
}
/*
* Some color formats (xmobar) require to terminate colors again
*
*/
char *endcolor() {
#ifdef XMOBAR
return "</fc>";
#else
return "";
#endif
}
/*
* Cleans wmii's /rbar directory by deleting all regular files
*
*/
void cleanup_rbar_dir() {
#ifdef DZEN
#if defined(DZEN) || defined(XMOBAR)
return;
#endif
struct dirent *ent;
@ -66,7 +80,7 @@ void cleanup_rbar_dir() {
*
*/
void create_file(const char *name) {
#ifdef DZEN
#if defined(DZEN) || defined(XMOBAR)
return;
#endif
char pathbuf[strlen(wmii_path)+256+1];
@ -99,7 +113,7 @@ void setup(void) {
unsigned int i;
char pathbuf[512];
#ifndef DZEN
#if !defined(DZEN) && !defined(XMOBAR)
struct stat statbuf;
/* Wait until wmii_path/rbar exists */
for (; stat(wmii_path, &statbuf) < 0; sleep(interval));
@ -142,6 +156,22 @@ void write_to_statusbar(const char *name, const char *message, bool final_entry)
exit(1);
}
return;
#elif XMOBAR
if (final_entry) {
if (printf("%s\n", message) < 0) {
perror("printf");
exit(1);
}
fflush(stdout);
return;
}
if (printf("%s" BAR, message) < 0) {
perror("printf");
exit(1);
}
return;
#endif
char pathbuf[strlen(wmii_path)+256+1];