X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fauto_detect_format.c;h=6ec5f731d906eb1269c2bdc2b26fd23a39439914;hb=68e447d3f6bb7767e4d95458b13ead49d76e5410;hp=b8dfdfc0231b92ee052fcc62917e37bcb93c76cd;hpb=7ab9167536e4ca0ccb5c5a797e693c484e0456d6;p=i3%2Fi3status diff --git a/src/auto_detect_format.c b/src/auto_detect_format.c index b8dfdfc..6ec5f73 100644 --- a/src/auto_detect_format.c +++ b/src/auto_detect_format.c @@ -29,7 +29,7 @@ * 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(); @@ -74,6 +74,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 +133,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; @@ -136,6 +149,9 @@ char *auto_detect_format() { } out: + if (parentname) + free(parentname); + closedir(dir); return format;