* We then check whether the pipe target’s name is known and chose the format.
*
*/
-char *auto_detect_format() {
+char *auto_detect_format(void) {
pid_t myppid = getppid();
pid_t mypid = getpid();
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) {
/* 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)
}
out:
+ if (parentname)
+ free(parentname);
+
closedir(dir);
return format;