mirror of
				https://github.com/tiyn/dwm.git
				synced 2025-11-03 20:51:15 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin/statuscmd'
This commit is contained in:
		@@ -107,7 +107,9 @@ static Button buttons[] = {
 | 
				
			|||||||
	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
 | 
						{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
 | 
				
			||||||
	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
 | 
						{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
 | 
						{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
 | 
				
			||||||
	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
 | 
						{ ClkStatusText,        0,              Button1,        sigdwmblocks,   {.i = 1} },
 | 
				
			||||||
 | 
						{ ClkStatusText,        0,              Button2,        sigdwmblocks,   {.i = 2} },
 | 
				
			||||||
 | 
						{ ClkStatusText,        0,              Button3,        sigdwmblocks,   {.i = 3} },
 | 
				
			||||||
	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
 | 
						{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
 | 
				
			||||||
	{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
 | 
						{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
 | 
				
			||||||
	{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
 | 
						{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										157
									
								
								dwm-statuscmd-signal-6.2.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								dwm-statuscmd-signal-6.2.diff
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,157 @@
 | 
				
			|||||||
 | 
					diff --git a/config.def.h b/config.def.h
 | 
				
			||||||
 | 
					index 1c0b587..b67825e 100644
 | 
				
			||||||
 | 
					--- a/config.def.h
 | 
				
			||||||
 | 
					+++ b/config.def.h
 | 
				
			||||||
 | 
					@@ -103,7 +103,9 @@ static Button buttons[] = {
 | 
				
			||||||
 | 
					 	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
 | 
				
			||||||
 | 
					 	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
 | 
				
			||||||
 | 
					 	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
 | 
				
			||||||
 | 
					-	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
 | 
				
			||||||
 | 
					+	{ ClkStatusText,        0,              Button1,        sigdwmblocks,   {.i = 1} },
 | 
				
			||||||
 | 
					+	{ ClkStatusText,        0,              Button2,        sigdwmblocks,   {.i = 2} },
 | 
				
			||||||
 | 
					+	{ ClkStatusText,        0,              Button3,        sigdwmblocks,   {.i = 3} },
 | 
				
			||||||
 | 
					 	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
 | 
				
			||||||
 | 
					 	{ ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
 | 
				
			||||||
 | 
					 	{ ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
 | 
				
			||||||
 | 
					diff --git a/dwm.c b/dwm.c
 | 
				
			||||||
 | 
					index 4465af1..c600131 100644
 | 
				
			||||||
 | 
					--- a/dwm.c
 | 
				
			||||||
 | 
					+++ b/dwm.c
 | 
				
			||||||
 | 
					@@ -156,6 +156,7 @@ static void clientmessage(XEvent *e);
 | 
				
			||||||
 | 
					 static void configure(Client *c);
 | 
				
			||||||
 | 
					 static void configurenotify(XEvent *e);
 | 
				
			||||||
 | 
					 static void configurerequest(XEvent *e);
 | 
				
			||||||
 | 
					+static void copyvalidchars(char *text, char *rawtext);
 | 
				
			||||||
 | 
					 static Monitor *createmon(void);
 | 
				
			||||||
 | 
					 static void destroynotify(XEvent *e);
 | 
				
			||||||
 | 
					 static void detach(Client *c);
 | 
				
			||||||
 | 
					@@ -169,6 +170,7 @@ static void focus(Client *c);
 | 
				
			||||||
 | 
					 static void focusin(XEvent *e);
 | 
				
			||||||
 | 
					 static void focusmon(const Arg *arg);
 | 
				
			||||||
 | 
					 static void focusstack(const Arg *arg);
 | 
				
			||||||
 | 
					+static int getdwmblockspid();
 | 
				
			||||||
 | 
					 static int getrootptr(int *x, int *y);
 | 
				
			||||||
 | 
					 static long getstate(Window w);
 | 
				
			||||||
 | 
					 static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
 | 
				
			||||||
 | 
					@@ -205,6 +207,7 @@ static void setup(void);
 | 
				
			||||||
 | 
					 static void seturgent(Client *c, int urg);
 | 
				
			||||||
 | 
					 static void showhide(Client *c);
 | 
				
			||||||
 | 
					 static void sigchld(int unused);
 | 
				
			||||||
 | 
					+static void sigdwmblocks(const Arg *arg);
 | 
				
			||||||
 | 
					 static void spawn(const Arg *arg);
 | 
				
			||||||
 | 
					 static void tag(const Arg *arg);
 | 
				
			||||||
 | 
					 static void tagmon(const Arg *arg);
 | 
				
			||||||
 | 
					@@ -237,6 +240,9 @@ static void zoom(const Arg *arg);
 | 
				
			||||||
 | 
					 /* variables */
 | 
				
			||||||
 | 
					 static const char broken[] = "broken";
 | 
				
			||||||
 | 
					 static char stext[256];
 | 
				
			||||||
 | 
					+static char rawstext[256];
 | 
				
			||||||
 | 
					+static int dwmblockssig;
 | 
				
			||||||
 | 
					+pid_t dwmblockspid = 0;
 | 
				
			||||||
 | 
					 static int screen;
 | 
				
			||||||
 | 
					 static int sw, sh;           /* X display screen geometry width, height */
 | 
				
			||||||
 | 
					 static int bh, blw = 0;      /* bar geometry */
 | 
				
			||||||
 | 
					@@ -439,9 +445,26 @@ buttonpress(XEvent *e)
 | 
				
			||||||
 | 
					 			arg.ui = 1 << i;
 | 
				
			||||||
 | 
					 		} else if (ev->x < x + blw)
 | 
				
			||||||
 | 
					 			click = ClkLtSymbol;
 | 
				
			||||||
 | 
					-		else if (ev->x > selmon->ww - TEXTW(stext))
 | 
				
			||||||
 | 
					+		else if (ev->x > (x = selmon->ww - TEXTW(stext) + lrpad)) {
 | 
				
			||||||
 | 
					 			click = ClkStatusText;
 | 
				
			||||||
 | 
					-		else
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			char *text = rawstext;
 | 
				
			||||||
 | 
					+			int i = -1;
 | 
				
			||||||
 | 
					+			char ch;
 | 
				
			||||||
 | 
					+			dwmblockssig = 0;
 | 
				
			||||||
 | 
					+			while (text[++i]) {
 | 
				
			||||||
 | 
					+				if ((unsigned char)text[i] < ' ') {
 | 
				
			||||||
 | 
					+					ch = text[i];
 | 
				
			||||||
 | 
					+					text[i] = '\0';
 | 
				
			||||||
 | 
					+					x += TEXTW(text) - lrpad;
 | 
				
			||||||
 | 
					+					text[i] = ch;
 | 
				
			||||||
 | 
					+					text += i+1;
 | 
				
			||||||
 | 
					+					i = -1;
 | 
				
			||||||
 | 
					+					if (x >= ev->x) break;
 | 
				
			||||||
 | 
					+					dwmblockssig = ch;
 | 
				
			||||||
 | 
					+				}
 | 
				
			||||||
 | 
					+			}
 | 
				
			||||||
 | 
					+		} else
 | 
				
			||||||
 | 
					 			click = ClkWinTitle;
 | 
				
			||||||
 | 
					 	} else if ((c = wintoclient(ev->window))) {
 | 
				
			||||||
 | 
					 		focus(c);
 | 
				
			||||||
 | 
					@@ -627,6 +650,19 @@ configurerequest(XEvent *e)
 | 
				
			||||||
 | 
					 	XSync(dpy, False);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+void
 | 
				
			||||||
 | 
					+copyvalidchars(char *text, char *rawtext)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	int i = -1, j = 0;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	while(rawtext[++i]) {
 | 
				
			||||||
 | 
					+		if ((unsigned char)rawtext[i] >= ' ') {
 | 
				
			||||||
 | 
					+			text[j++] = rawtext[i];
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+	text[j] = '\0';
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 Monitor *
 | 
				
			||||||
 | 
					 createmon(void)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					@@ -871,6 +907,18 @@ getatomprop(Client *c, Atom prop)
 | 
				
			||||||
 | 
					 	return atom;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+int
 | 
				
			||||||
 | 
					+getdwmblockspid()
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	char buf[16];
 | 
				
			||||||
 | 
					+	FILE *fp = popen("pidof -s dwmblocks", "r");
 | 
				
			||||||
 | 
					+	fgets(buf, sizeof(buf), fp);
 | 
				
			||||||
 | 
					+	pid_t pid = strtoul(buf, NULL, 10);
 | 
				
			||||||
 | 
					+	pclose(fp);
 | 
				
			||||||
 | 
					+	dwmblockspid = pid;
 | 
				
			||||||
 | 
					+	return pid != 0 ? 0 : -1;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 int
 | 
				
			||||||
 | 
					 getrootptr(int *x, int *y)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					@@ -1636,6 +1684,23 @@ sigchld(int unused)
 | 
				
			||||||
 | 
					 	while (0 < waitpid(-1, NULL, WNOHANG));
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+void
 | 
				
			||||||
 | 
					+sigdwmblocks(const Arg *arg)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	union sigval sv;
 | 
				
			||||||
 | 
					+	sv.sival_int = (dwmblockssig << 8) | arg->i;
 | 
				
			||||||
 | 
					+	if (!dwmblockspid)
 | 
				
			||||||
 | 
					+		if (getdwmblockspid() == -1)
 | 
				
			||||||
 | 
					+			return;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (sigqueue(dwmblockspid, SIGUSR1, sv) == -1) {
 | 
				
			||||||
 | 
					+		if (errno == ESRCH) {
 | 
				
			||||||
 | 
					+			if (!getdwmblockspid())
 | 
				
			||||||
 | 
					+				sigqueue(dwmblockspid, SIGUSR1, sv);
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 spawn(const Arg *arg)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					@@ -1987,8 +2052,10 @@ updatesizehints(Client *c)
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 updatestatus(void)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-	if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
 | 
				
			||||||
 | 
					+	if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext)))
 | 
				
			||||||
 | 
					 		strcpy(stext, "dwm-"VERSION);
 | 
				
			||||||
 | 
					+	else
 | 
				
			||||||
 | 
					+		copyvalidchars(stext, rawstext);
 | 
				
			||||||
 | 
					 	drawbar(selmon);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
							
								
								
									
										73
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								dwm.c
									
									
									
									
									
								
							@@ -159,6 +159,7 @@ static void clientmessage(XEvent *e);
 | 
				
			|||||||
static void configure(Client *c);
 | 
					static void configure(Client *c);
 | 
				
			||||||
static void configurenotify(XEvent *e);
 | 
					static void configurenotify(XEvent *e);
 | 
				
			||||||
static void configurerequest(XEvent *e);
 | 
					static void configurerequest(XEvent *e);
 | 
				
			||||||
 | 
					static void copyvalidchars(char *text, char *rawtext);
 | 
				
			||||||
static Monitor *createmon(void);
 | 
					static Monitor *createmon(void);
 | 
				
			||||||
static void deck(Monitor *m);
 | 
					static void deck(Monitor *m);
 | 
				
			||||||
static void destroynotify(XEvent *e);
 | 
					static void destroynotify(XEvent *e);
 | 
				
			||||||
@@ -173,6 +174,7 @@ static void focus(Client *c);
 | 
				
			|||||||
static void focusin(XEvent *e);
 | 
					static void focusin(XEvent *e);
 | 
				
			||||||
static void focusmon(const Arg *arg);
 | 
					static void focusmon(const Arg *arg);
 | 
				
			||||||
static void focusstack(const Arg *arg);
 | 
					static void focusstack(const Arg *arg);
 | 
				
			||||||
 | 
					static int getdwmblockspid();
 | 
				
			||||||
static int getrootptr(int *x, int *y);
 | 
					static int getrootptr(int *x, int *y);
 | 
				
			||||||
static long getstate(Window w);
 | 
					static long getstate(Window w);
 | 
				
			||||||
static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
 | 
					static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
 | 
				
			||||||
@@ -209,6 +211,7 @@ static void setup(void);
 | 
				
			|||||||
static void seturgent(Client *c, int urg);
 | 
					static void seturgent(Client *c, int urg);
 | 
				
			||||||
static void showhide(Client *c);
 | 
					static void showhide(Client *c);
 | 
				
			||||||
static void sigchld(int unused);
 | 
					static void sigchld(int unused);
 | 
				
			||||||
 | 
					static void sigdwmblocks(const Arg *arg);
 | 
				
			||||||
static void spawn(const Arg *arg);
 | 
					static void spawn(const Arg *arg);
 | 
				
			||||||
static void tag(const Arg *arg);
 | 
					static void tag(const Arg *arg);
 | 
				
			||||||
static void tagmon(const Arg *arg);
 | 
					static void tagmon(const Arg *arg);
 | 
				
			||||||
@@ -242,6 +245,9 @@ static void zoom(const Arg *arg);
 | 
				
			|||||||
/* variables */
 | 
					/* variables */
 | 
				
			||||||
static const char broken[] = "broken";
 | 
					static const char broken[] = "broken";
 | 
				
			||||||
static char stext[256];
 | 
					static char stext[256];
 | 
				
			||||||
 | 
					static char rawstext[256];
 | 
				
			||||||
 | 
					static int dwmblockssig;
 | 
				
			||||||
 | 
					pid_t dwmblockspid = 0;
 | 
				
			||||||
static int screen;
 | 
					static int screen;
 | 
				
			||||||
static int sw, sh;           /* X display screen geometry width, height */
 | 
					static int sw, sh;           /* X display screen geometry width, height */
 | 
				
			||||||
static int bh, blw = 0;      /* bar geometry */
 | 
					static int bh, blw = 0;      /* bar geometry */
 | 
				
			||||||
@@ -458,9 +464,26 @@ buttonpress(XEvent *e)
 | 
				
			|||||||
			arg.ui = 1 << i;
 | 
								arg.ui = 1 << i;
 | 
				
			||||||
		} else if (ev->x < x + blw)
 | 
							} else if (ev->x < x + blw)
 | 
				
			||||||
			click = ClkLtSymbol;
 | 
								click = ClkLtSymbol;
 | 
				
			||||||
		else if (ev->x > selmon->ww - TEXTW(stext))
 | 
							else if (ev->x > (x = selmon->ww - TEXTW(stext) + lrpad)) {
 | 
				
			||||||
			click = ClkStatusText;
 | 
								click = ClkStatusText;
 | 
				
			||||||
		else
 | 
					
 | 
				
			||||||
 | 
								char *text = rawstext;
 | 
				
			||||||
 | 
								int i = -1;
 | 
				
			||||||
 | 
								char ch;
 | 
				
			||||||
 | 
								dwmblockssig = 0;
 | 
				
			||||||
 | 
								while (text[++i]) {
 | 
				
			||||||
 | 
									if ((unsigned char)text[i] < ' ') {
 | 
				
			||||||
 | 
										ch = text[i];
 | 
				
			||||||
 | 
										text[i] = '\0';
 | 
				
			||||||
 | 
										x += TEXTW(text) - lrpad;
 | 
				
			||||||
 | 
										text[i] = ch;
 | 
				
			||||||
 | 
										text += i+1;
 | 
				
			||||||
 | 
										i = -1;
 | 
				
			||||||
 | 
										if (x >= ev->x) break;
 | 
				
			||||||
 | 
										dwmblockssig = ch;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else
 | 
				
			||||||
			click = ClkWinTitle;
 | 
								click = ClkWinTitle;
 | 
				
			||||||
	} else if ((c = wintoclient(ev->window))) {
 | 
						} else if ((c = wintoclient(ev->window))) {
 | 
				
			||||||
		focus(c);
 | 
							focus(c);
 | 
				
			||||||
@@ -646,6 +669,19 @@ configurerequest(XEvent *e)
 | 
				
			|||||||
	XSync(dpy, False);
 | 
						XSync(dpy, False);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					copyvalidchars(char *text, char *rawtext)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int i = -1, j = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while(rawtext[++i]) {
 | 
				
			||||||
 | 
							if ((unsigned char)rawtext[i] >= ' ') {
 | 
				
			||||||
 | 
								text[j++] = rawtext[i];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						text[j] = '\0';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Monitor *
 | 
					Monitor *
 | 
				
			||||||
createmon(void)
 | 
					createmon(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -928,6 +964,18 @@ getatomprop(Client *c, Atom prop)
 | 
				
			|||||||
	return atom;
 | 
						return atom;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int
 | 
				
			||||||
 | 
					getdwmblockspid()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						char buf[16];
 | 
				
			||||||
 | 
						FILE *fp = popen("pidof -s dwmblocks", "r");
 | 
				
			||||||
 | 
						fgets(buf, sizeof(buf), fp);
 | 
				
			||||||
 | 
						pid_t pid = strtoul(buf, NULL, 10);
 | 
				
			||||||
 | 
						pclose(fp);
 | 
				
			||||||
 | 
						dwmblockspid = pid;
 | 
				
			||||||
 | 
						return pid != 0 ? 0 : -1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
getrootptr(int *x, int *y)
 | 
					getrootptr(int *x, int *y)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -1705,6 +1753,23 @@ sigchld(int unused)
 | 
				
			|||||||
	while (0 < waitpid(-1, NULL, WNOHANG));
 | 
						while (0 < waitpid(-1, NULL, WNOHANG));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					sigdwmblocks(const Arg *arg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						union sigval sv;
 | 
				
			||||||
 | 
						sv.sival_int = (dwmblockssig << 8) | arg->i;
 | 
				
			||||||
 | 
						if (!dwmblockspid)
 | 
				
			||||||
 | 
							if (getdwmblockspid() == -1)
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (sigqueue(dwmblockspid, SIGUSR1, sv) == -1) {
 | 
				
			||||||
 | 
							if (errno == ESRCH) {
 | 
				
			||||||
 | 
								if (!getdwmblockspid())
 | 
				
			||||||
 | 
									sigqueue(dwmblockspid, SIGUSR1, sv);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
spawn(const Arg *arg)
 | 
					spawn(const Arg *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -2087,8 +2152,10 @@ updatesizehints(Client *c)
 | 
				
			|||||||
void
 | 
					void
 | 
				
			||||||
updatestatus(void)
 | 
					updatestatus(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
 | 
						if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext)))
 | 
				
			||||||
		strcpy(stext, "dwm-"VERSION);
 | 
							strcpy(stext, "dwm-"VERSION);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							copyvalidchars(stext, rawstext);
 | 
				
			||||||
	drawbar(selmon);
 | 
						drawbar(selmon);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user