From 013fdece8dbf31acf531b4745e335bb0edb56a2e Mon Sep 17 00:00:00 2001
From: Michael Stapelberg <michael@stapelberg.de>
Date: Sat, 24 Oct 2009 13:27:02 +0200
Subject: Change output format to be a config option instead of a compile time
 define

---
 i3status.c   | 12 ++++++++++++
 i3status.h   |  9 +--------
 src/output.c | 27 ++++++++++++++-------------
 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(" | ");
 }
-- 
cgit v1.2.3