dwm-nametag-prepend-6.1.diff - sites - public wiki contents of suckless.org
HTML git clone git://git.suckless.org/sites
DIR Log
DIR Files
DIR Refs
---
dwm-nametag-prepend-6.1.diff (2525B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 875885b..222745d 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -14,7 +14,10 @@ static const Bool showbar = True; /* False means no bar */
6 static const Bool topbar = True; /* False means bottom bar */
7
8 /* tagging */
9 -static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
10 +#define MAX_TAGNAME_LEN 14 /* excludes TAG_PREPEND */
11 +#define TAG_PREPEND "%1i:" /* formatted as 2 chars */
12 +#define MAX_TAGLEN 16 /* altogether */
13 +static char tags[][MAX_TAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
14
15 static const Rule rules[] = {
16 /* xprop(1):
17 @@ -79,6 +82,7 @@ static Key keys[] = {
18 { MODKEY, XK_period, focusmon, {.i = +1 } },
19 { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
20 { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
21 + { MODKEY, XK_n, nametag, {0} },
22 TAGKEYS( XK_1, 0)
23 TAGKEYS( XK_2, 1)
24 TAGKEYS( XK_3, 2)
25 diff --git a/dwm.c b/dwm.c
26 index 1bbb4b3..fefdd69 100644
27 --- a/dwm.c
28 +++ b/dwm.c
29 @@ -183,6 +183,7 @@ static void maprequest(XEvent *e);
30 static void monocle(Monitor *m);
31 static void motionnotify(XEvent *e);
32 static void movemouse(const Arg *arg);
33 +static void nametag(const Arg *arg);
34 static Client *nexttiled(Client *c);
35 static void pop(Client *);
36 static void propertynotify(XEvent *e);
37 @@ -1174,6 +1175,34 @@ movemouse(const Arg *arg) {
38 }
39 }
40
41 +void
42 +nametag(const Arg *arg) {
43 + char *p, name[MAX_TAGNAME_LEN];
44 + FILE *f;
45 + int i;
46 +
47 + errno = 0; // popen(3p) says on failure it "may" set errno
48 + if(!(f = popen("dmenu < /dev/null", "r"))) {
49 + fprintf(stderr, "dwm: popen 'dmenu < /dev/null' failed%s%s\n", errno ? ": " : "", errno ? strerror(errno) : "");
50 + return;
51 + }
52 + if (!(p = fgets(name, MAX_TAGNAME_LEN, f)) && (i = errno) && ferror(f))
53 + fprintf(stderr, "dwm: fgets failed: %s\n", strerror(i));
54 + if (pclose(f) < 0)
55 + fprintf(stderr, "dwm: pclose failed: %s\n", strerror(errno));
56 + if(!p)
57 + return;
58 + if((p = strchr(name, '\n')))
59 + *p = '\0';
60 +
61 + for(i = 0; i < LENGTH(tags); i++)
62 + if(selmon->tagset[selmon->seltags] & (1 << i)) {
63 + sprintf(tags[i], TAG_PREPEND, i+1);
64 + strcat(tags[i], name);
65 + }
66 + drawbars();
67 +}
68 +
69 Client *
70 nexttiled(Client *c) {
71 for(; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);