--- a/config.def.h +++ b/config.def.h @@ -19,7 +19,10 @@ }; /* tagging */ -static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; +#define MAX_TAGNAME_LEN 14 /* excludes TAG_PREPEND */ +#define TAG_PREPEND "%1i:" /* formatted as 2 chars */ +#define MAX_TAGLEN 16 /* altogether */ +static char tags[][MAX_TAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; static const Rule rules[] = { /* xprop(1): --- a/dwm.c +++ b/dwm.c @@ -183,6 +183,7 @@ static void monocle(Monitor *m); static void motionnotify(XEvent *e); static void movemouse(const Arg *arg); +static void nametag(const Arg *arg); static Client *nexttiled(Client *c); static void pop(Client *); static void propertynotify(XEvent *e); @@ -1190,6 +1191,34 @@ selmon = m; focus(NULL); } +} + +void +nametag(const Arg *arg) { + char *p, name[MAX_TAGNAME_LEN]; + FILE *f; + int i; + + errno = 0; // popen(3p) says on failure it "may" set errno + if(!(f = popen("dmenu < /dev/null", "r"))) { + fprintf(stderr, "dwm: popen 'dmenu < /dev/null' failed%s%s\n", errno ? ": " : "", errno ? strerror(errno) : ""); + return; + } + if (!(p = fgets(name, MAX_TAGNAME_LEN, f)) && (i = errno) && ferror(f)) + fprintf(stderr, "dwm: fgets failed: %s\n", strerror(i)); + if (pclose(f) < 0) + fprintf(stderr, "dwm: pclose failed: %s\n", strerror(errno)); + if(!p) + return; + if((p = strchr(name, '\n'))) + *p = '\0'; + + for(i = 0; i < LENGTH(tags); i++) + if(selmon->tagset[selmon->seltags] & (1 << i)) { + sprintf(tags[i], TAG_PREPEND, i+1); + strcat(tags[i], name); + } + drawbars(); } Client *