dwm-nametag-prepend-6.2.diff (1608B)
1 --- a/config.def.h 2 +++ b/config.def.h 3 @@ -19,7 +19,10 @@ 4 }; 5 6 /* tagging */ 7 -static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; 8 +#define MAX_TAGNAME_LEN 14 /* excludes TAG_PREPEND */ 9 +#define TAG_PREPEND "%1i:" /* formatted as 2 chars */ 10 +#define MAX_TAGLEN 16 /* altogether */ 11 +static char tags[][MAX_TAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; 12 13 static const Rule rules[] = { 14 /* xprop(1): 15 --- a/dwm.c 16 +++ b/dwm.c 17 @@ -183,6 +183,7 @@ 18 static void monocle(Monitor *m); 19 static void motionnotify(XEvent *e); 20 static void movemouse(const Arg *arg); 21 +static void nametag(const Arg *arg); 22 static Client *nexttiled(Client *c); 23 static void pop(Client *); 24 static void propertynotify(XEvent *e); 25 @@ -1190,6 +1191,34 @@ 26 selmon = m; 27 focus(NULL); 28 } 29 +} 30 + 31 +void 32 +nametag(const Arg *arg) { 33 + char *p, name[MAX_TAGNAME_LEN]; 34 + FILE *f; 35 + int i; 36 + 37 + errno = 0; // popen(3p) says on failure it "may" set errno 38 + if(!(f = popen("dmenu < /dev/null", "r"))) { 39 + fprintf(stderr, "dwm: popen 'dmenu < /dev/null' failed%s%s\n", errno ? ": " : "", errno ? strerror(errno) : ""); 40 + return; 41 + } 42 + if (!(p = fgets(name, MAX_TAGNAME_LEN, f)) && (i = errno) && ferror(f)) 43 + fprintf(stderr, "dwm: fgets failed: %s\n", strerror(i)); 44 + if (pclose(f) < 0) 45 + fprintf(stderr, "dwm: pclose failed: %s\n", strerror(errno)); 46 + if(!p) 47 + return; 48 + if((p = strchr(name, '\n'))) 49 + *p = '\0'; 50 + 51 + for(i = 0; i < LENGTH(tags); i++) 52 + if(selmon->tagset[selmon->seltags] & (1 << i)) { 53 + sprintf(tags[i], TAG_PREPEND, i+1); 54 + strcat(tags[i], name); 55 + } 56 + drawbars(); 57 } 58 59 Client *