Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-statuscmd-nosignal-status2d-20210402-60bb3df.diff - sites - public wiki con…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-statuscmd-nosignal-status2d-20210402-60bb3df.diff (5550B)
---
1 From df16de3b4457fd6537e6efaa1785183770056ed6 Mon Sep 17 00:00:00 2001
2 From: Daniel Bylinka <[email protected]>
3 Date: Fri, 2 Apr 2021 19:33:35 +0200
4 Subject: [PATCH] [statuscmd] status2d compatibility for statuscmd-nosign…
5
6 ---
7 config.def.h | 10 +++++++-
8 dwm.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++----
9 2 files changed, 72 insertions(+), 6 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 1c0b587..8f88366 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -59,6 +59,12 @@ static char dmenumon[2] = "0"; /* component of dmenuc…
16 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", d…
17 static const char *termcmd[] = { "st", NULL };
18
19 +/* commands spawned when clicking statusbar, the mouse button pressed i…
20 +static const StatusCmd statuscmds[] = {
21 + { "notify-send Mouse$BUTTON", 1 },
22 +};
23 +static const char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL };
24 +
25 static Key keys[] = {
26 /* modifier key function argu…
27 { MODKEY, XK_p, spawn, {.v …
28 @@ -103,7 +109,9 @@ static Button buttons[] = {
29 { ClkLtSymbol, 0, Button1, setlayo…
30 { ClkLtSymbol, 0, Button3, setlayo…
31 { ClkWinTitle, 0, Button2, zoom, …
32 - { ClkStatusText, 0, Button2, spawn, …
33 + { ClkStatusText, 0, Button1, spawn, …
34 + { ClkStatusText, 0, Button2, spawn, …
35 + { ClkStatusText, 0, Button3, spawn, …
36 { ClkClientWin, MODKEY, Button1, movemou…
37 { ClkClientWin, MODKEY, Button2, togglef…
38 { ClkClientWin, MODKEY, Button3, resizem…
39 diff --git a/dwm.c b/dwm.c
40 index acbe6c9..851b0ed 100644
41 --- a/dwm.c
42 +++ b/dwm.c
43 @@ -141,6 +141,11 @@ typedef struct {
44 int monitor;
45 } Rule;
46
47 +typedef struct {
48 + const char *cmd;
49 + int id;
50 +} StatusCmd;
51 +
52 /* function declarations */
53 static void applyrules(Client *c);
54 static int applysizehints(Client *c, int *x, int *y, int *w, int *h, in…
55 @@ -239,6 +244,9 @@ static void zoom(const Arg *arg);
56 /* variables */
57 static const char broken[] = "broken";
58 static char stext[1024];
59 +static int statusw;
60 +static int statuscmdn;
61 +static char lastbutton[] = "-";
62 static int screen;
63 static int sw, sh; /* X display screen geometry width, height…
64 static int bh, blw = 0; /* bar geometry */
65 @@ -441,8 +449,27 @@ buttonpress(XEvent *e)
66 arg.ui = 1 << i;
67 } else if (ev->x < x + blw)
68 click = ClkLtSymbol;
69 - else if (ev->x > selmon->ww - (int)TEXTW(stext))
70 + else if (ev->x > selmon->ww - statusw) {
71 + char *text, *s, ch;
72 + *lastbutton = '0' + ev->button;
73 +
74 + x = selmon->ww - statusw;
75 click = ClkStatusText;
76 +
77 + statuscmdn = 0;
78 + for (text = s = stext; *s && x <= ev->x; s++) {
79 + if ((unsigned char)(*s) < ' ') {
80 + ch = *s;
81 + *s = '\0';
82 + x += TEXTW(text) - lrpad;
83 + *s = ch;
84 + text = s + 1;
85 + if (x >= ev->x)
86 + break;
87 + statuscmdn = ch;
88 + }
89 + }
90 + }
91 else
92 click = ClkWinTitle;
93 } else if ((c = wintoclient(ev->window))) {
94 @@ -696,7 +723,7 @@ dirtomon(int dir)
95
96 int
97 drawstatusbar(Monitor *m, int bh, char* stext) {
98 - int ret, i, w, x, len;
99 + int ret, i, j, w, x, len;
100 short isCode = 0;
101 char *text;
102 char *p;
103 @@ -705,7 +732,12 @@ drawstatusbar(Monitor *m, int bh, char* stext) {
104 if (!(text = (char*) malloc(sizeof(char)*len)))
105 die("malloc");
106 p = text;
107 - memcpy(text, stext, len);
108 +
109 + i = -1, j = 0;
110 + while (stext[++i])
111 + if ((unsigned char)stext[i] >= ' ')
112 + text[j++] = stext[i];
113 + text[j] = '\0';
114
115 /* compute width of the status text */
116 w = 0;
117 @@ -813,7 +845,7 @@ drawbar(Monitor *m)
118
119 /* draw status first so it can be overdrawn by tags later */
120 if (m == selmon) { /* status is only drawn on selected monitor …
121 - tw = m->ww - drawstatusbar(m, bh, stext);
122 + tw = statusw = m->ww - drawstatusbar(m, bh, stext);
123 }
124
125 for (c = m->clients; c; c = c->next) {
126 @@ -1753,6 +1785,17 @@ spawn(const Arg *arg)
127 if (fork() == 0) {
128 if (dpy)
129 close(ConnectionNumber(dpy));
130 + if (arg->v == statuscmd) {
131 + for (int i = 0; i < LENGTH(statuscmds); i++) {
132 + if (statuscmdn == statuscmds[i].id) {
133 + statuscmd[2] = statuscmds[i].cm…
134 + setenv("BUTTON", lastbutton, 1);
135 + break;
136 + }
137 + }
138 + if (!statuscmd[2])
139 + exit(EXIT_SUCCESS);
140 + }
141 setsid();
142 execvp(((char **)arg->v)[0], (char **)arg->v);
143 fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
144 @@ -2098,8 +2141,23 @@ updatesizehints(Client *c)
145 void
146 updatestatus(void)
147 {
148 - if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
149 + if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) {
150 strcpy(stext, "dwm-"VERSION);
151 + statusw = TEXTW(stext) - lrpad + 2;
152 + } else {
153 + char *text, *s, ch;
154 + statusw = 0;
155 + for (text = s = stext; *s; s++) {
156 + if ((unsigned char)(*s) < ' ') {
157 + ch = *s;
158 + *s = '\0';
159 + statusw += TEXTW(text) - lrpad;
160 + *s = ch;
161 + text = s + 1;
162 + }
163 + }
164 + statusw += TEXTW(text) - lrpad + 2;
165 + }
166 drawbar(selmon);
167 }
168
169 --
170 2.31.0
171
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.