summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--i3status.c12
-rw-r--r--i3status.h9
-rw-r--r--src/output.c27
3 files changed, 27 insertions, 21 deletions
diff --git a/i3status.c b/i3status.c
index 67b86dd..c6e36f5 100644
--- a/i3status.c
+++ b/i3status.c
@@ -41,6 +41,7 @@ int main(int argc, char *argv[]) {
unsigned int j;
cfg_opt_t general_opts[] = {
+ CFG_STR("output_format", "dzen2", CFGF_NONE),
CFG_BOOL("colors", 1, CFGF_NONE),
CFG_INT("interval", 1, CFGF_NONE),
CFG_END()
@@ -137,6 +138,17 @@ int main(int argc, char *argv[]) {
return EXIT_FAILURE;
cfg_general = cfg_getsec(cfg, "general");
+ if (cfg_general == NULL)
+ die("Could not get section \"general\"\n");
+
+ char *output_str = cfg_getstr(cfg_general, "output_format");
+ if (strcasecmp(output_str, "dzen2") == 0)
+ output_format = O_DZEN2;
+ else if (strcasecmp(output_str, "xmobar") == 0)
+ output_format = O_XMOBAR;
+ else if (strcasecmp(output_str, "none") == 0)
+ output_format = O_NONE;
+ else die("Unknown output format: \"%s\"\n", output_str);
if ((general_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
die("Could not create socket\n");
diff --git a/i3status.h b/i3status.h
index 0a42555..4c7d4b4 100644
--- a/i3status.h
+++ b/i3status.h
@@ -1,18 +1,11 @@
#ifndef _I3STATUS_H
#define _I3STATUS_H
-#if !defined(DZEN) && !defined(XMOBAR)
- #error "You have to enable either -DDZEN or -DXMOBAR"
-#endif
+enum { O_DZEN2, O_XMOBAR, O_NONE } output_format;
#include <stdbool.h>
#include <confuse.h>
-#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))
diff --git a/src/output.c b/src/output.c
index d4d8c2f..3d6666e 100644
--- a/src/output.c
+++ b/src/output.c
@@ -20,11 +20,11 @@ char *color(const char *colorstr) {
colorbuf[0] = '\0';
return colorbuf;
}
-#ifdef DZEN
- (void)snprintf(colorbuf, sizeof(colorbuf), "^fg(%s)", colorstr);
-#elif XMOBAR
- (void)snprintf(colorbuf, sizeof(colorbuf), "<fc=%s>", colorstr);
-#endif
+ if (output_format == O_DZEN2)
+ (void)snprintf(colorbuf, sizeof(colorbuf), "^fg(%s)", colorstr);
+ else if (output_format == O_XMOBAR)
+ (void)snprintf(colorbuf, sizeof(colorbuf), "<fc=%s>", colorstr);
+
return colorbuf;
}
@@ -33,15 +33,16 @@ char *color(const char *colorstr) {
*
*/
char *endcolor() {
-#ifdef XMOBAR
- return "</fc>";
-#else
- return "";
-#endif
+ if (output_format == O_XMOBAR)
+ return "</fc>";
+ else return "";
}
void print_seperator() {
-#if defined(DZEN) || defined(XMOBAR)
- printf("%s", BAR);
-#endif
+ if (output_format == O_DZEN2)
+ printf("^fg(#333333)^p(5;-2)^ro(2)^p()^fg()^p(5)");
+ else if (output_format == O_XMOBAR)
+ printf("<fc=#333333> | </fc>");
+ else if (output_format == O_NONE)
+ printf(" | ");
}