]> git.sur5r.net Git - i3/i3status/blobdiff - src/auto_detect_format.c
Makefile: use .SILENT and support V=1 for verbose builds
[i3/i3status] / src / auto_detect_format.c
index 2df13f5f1782cae71fb5b65f1455ec238920af98..524e2e9d9b40a0737a2c45a5cd5eaca92b12965f 100644 (file)
  * We then check whether the pipe target’s name is known and chose the format.
  *
  */
-char *auto_detect_format() {
+char *auto_detect_format(void) {
+    /* If stdout is a tty, we output directly to a terminal. */
+    if (isatty(STDOUT_FILENO)) {
+        return "term";
+    }
+
     pid_t myppid = getppid();
     pid_t mypid = getpid();
 
@@ -74,6 +79,19 @@ char *auto_detect_format() {
     if (!parentname)
         goto out;
 
+    /* Some shells, for example zsh, open a pipe in a way which will make the
+     * pipe target the parent process of i3status. If we detect that, we set
+     * the format and we are done. */
+    if (strcasecmp(parentname, "i3bar") == 0)
+        format = "i3bar";
+    else if (strcasecmp(parentname, "dzen2") == 0)
+        format = "dzen2";
+    else if (strcasecmp(parentname, "xmobar") == 0)
+        format = "xmobar";
+
+    if (format)
+        goto out;
+
     rewinddir(dir);
 
     while ((entry = readdir(dir)) != NULL) {
@@ -120,13 +138,13 @@ char *auto_detect_format() {
         /* Check for known destination programs and set format */
         char *newfmt = NULL;
         if (strcasecmp(name, "i3bar") == 0)
-            newfmt = "none";
+            newfmt = "i3bar";
         else if (strcasecmp(name, "dzen2") == 0)
             newfmt = "dzen2";
         else if (strcasecmp(name, "xmobar") == 0)
             newfmt = "xmobar";
 
-        if (newfmt && format) {
+        if (newfmt && format && strcmp(newfmt, format) != 0) {
             fprintf(stderr, "i3status: cannot auto-configure, situation ambiguous (format \"%s\" *and* \"%s\" detected)\n", newfmt, format);
             format = NULL;
             break;