aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/xmonad-status.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scripts/xmonad-status.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/scripts/xmonad-status.c b/scripts/xmonad-status.c
new file mode 100644
index 0000000..9fe7900
--- /dev/null
+++ b/scripts/xmonad-status.c
@@ -0,0 +1,56 @@
+/*
+ Module : xmonad-workspace.c
+ Copyright : (c) Don Stewart 2007
+ License : BSD3-style (see LICENSE)
+
+ Maintainer : dons@cse.unsw.edu.au
+ Stability : stable
+ Portability : portable
+
+ C parser for new workspace format
+
+*/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <signal.h>
+
+#define WORKSPACES 9
+
+int main(void) {
+
+ size_t len;
+ char workspaces[WORKSPACES];
+ char buf[1024];
+ char *s, *p, *q, current, *rest;
+ int n, i = 0;
+
+ signal(SIGPIPE, SIG_IGN);
+
+ while (fgets(buf, sizeof(buf), stdin) != NULL) {
+
+ n = strlen(buf);
+ buf[n-1] = '\0';
+ s = buf;
+
+ /* extract tag of current workspace */
+ current = *(char *)strsep(&s,"|");
+ rest = s;
+
+ /* split up workspace list */
+ /* extract just the tags of the workspace list */
+ while (i < WORKSPACES) {
+ workspaces[i++] = *(char *)strsep(&rest, ",");
+ }
+
+ /* now print out list */
+ for (i = 0; i < WORKSPACES; i++) {
+ printf(((workspaces[i] == current) ? "[%c]" : " %c "), workspaces[i]);
+ }
+
+ putchar('\n');
+ fflush(stdout);
+ }
+ return EXIT_SUCCESS;
+}