mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 14:05:45 +02:00
Adding status2d patch
This commit is contained in:
parent
fc8434abd1
commit
e79aec52c2
@ -15,6 +15,8 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
|
||||
|
||||
### Changelog:
|
||||
|
||||
2020-05-26 - Added the status2d patch (with alpha, systray, statuspadding and dwmblocks compatibility, no statuscolors or extrabar compatibility)
|
||||
|
||||
2020-05-21 - Added the moveplace and moveresize patches
|
||||
|
||||
2020-05-03 - Added the shiftviewclients patch and the no transparent borders patch which removes opacity from window borders when the alpha patch is not used
|
||||
@ -349,6 +351,9 @@ Refer to [https://dwm.suckless.org/](https://dwm.suckless.org/) for details on t
|
||||
- [statuscmd](https://dwm.suckless.org/patches/statuscmd/)
|
||||
- adds the ability to execute shell commands based on the mouse button and position when clicking the status bar
|
||||
|
||||
- [status2d](https://dwm.suckless.org/patches/status2d/)
|
||||
- allows colors and rectangle drawing in the dwm status bar
|
||||
|
||||
- [statusallmons](https://dwm.suckless.org/patches/statuspadding/)
|
||||
- this patch draws and updates the statusbar on all monitors
|
||||
|
||||
|
12
config.def.h
12
config.def.h
@ -131,7 +131,7 @@ static const unsigned int alphas[][3] = {
|
||||
#if VTCOLORS_PATCH && FLOAT_BORDER_COLOR_PATCH
|
||||
static const char title_bg_dark[] = "#303030";
|
||||
static const char title_bg_light[] = "#fdfdfd";
|
||||
static const int color_ptrs[][4] = {
|
||||
static const int color_ptrs[][ColCount] = {
|
||||
/* fg bg border float */
|
||||
[SchemeNorm] = { -1, -1, 5, 12 },
|
||||
[SchemeSel] = { -1, -1, 11, 13 },
|
||||
@ -150,7 +150,7 @@ static const int color_ptrs[][4] = {
|
||||
[SchemeTitleSel] = { 6, -1, -1, -1 },
|
||||
[SchemeStatus] = { 2, 0, 0, -1 },
|
||||
};
|
||||
static char colors[][4][8] = {
|
||||
static char colors[][ColCount][8] = {
|
||||
/* fg bg border float */
|
||||
[SchemeNorm] = { "#000000", "#000000", "#000000", "#000000" },
|
||||
[SchemeSel] = { "#000000", "#000000", "#000000", "#000000" },
|
||||
@ -172,7 +172,7 @@ static char colors[][4][8] = {
|
||||
#elif VTCOLORS_PATCH
|
||||
static const char title_bg_dark[] = "#303030";
|
||||
static const char title_bg_light[] = "#fdfdfd";
|
||||
static const int color_ptrs[][3] = {
|
||||
static const int color_ptrs[][ColCount] = {
|
||||
/* fg bg border */
|
||||
[SchemeNorm] = { -1, -1, 5 },
|
||||
[SchemeSel] = { -1, -1, 11 },
|
||||
@ -191,7 +191,7 @@ static const int color_ptrs[][3] = {
|
||||
[SchemeTitleSel] = { 6, -1, -1 },
|
||||
[SchemeStatus] = { 2, 0, 0 },
|
||||
};
|
||||
static char colors[][3][8] = {
|
||||
static char colors[][ColCount][8] = {
|
||||
/* fg bg border */
|
||||
[SchemeNorm] = { "#000000", "#000000", "#000000" },
|
||||
[SchemeSel] = { "#000000", "#000000", "#000000" },
|
||||
@ -215,7 +215,7 @@ static
|
||||
#if !XRDB_PATCH
|
||||
const
|
||||
#endif // XRDB_PATCH
|
||||
char *colors[][4] = {
|
||||
char *colors[][ColCount] = {
|
||||
/* fg bg border float */
|
||||
[SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor, normfloatcolor },
|
||||
[SchemeSel] = { selfgcolor, selbgcolor, selbordercolor, selfloatcolor },
|
||||
@ -237,7 +237,7 @@ static
|
||||
#if !XRDB_PATCH
|
||||
const
|
||||
#endif // XRDB_PATCH
|
||||
char *colors[][3] = {
|
||||
char *colors[][ColCount] = {
|
||||
/* fg bg border */
|
||||
[SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor },
|
||||
[SchemeSel] = { selfgcolor, selbgcolor, selbordercolor },
|
||||
|
4
drw.h
4
drw.h
@ -13,9 +13,9 @@ typedef struct Fnt {
|
||||
} Fnt;
|
||||
|
||||
#if FLOAT_BORDER_COLOR_PATCH
|
||||
enum { ColFg, ColBg, ColBorder, ColFloat }; /* Clr scheme index */
|
||||
enum { ColFg, ColBg, ColBorder, ColFloat, ColCount }; /* Clr scheme index */
|
||||
#else
|
||||
enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */
|
||||
enum { ColFg, ColBg, ColBorder, ColCount }; /* Clr scheme index */
|
||||
#endif // FLOAT_BORDER_COLOR_PATCH
|
||||
typedef XftColor Clr;
|
||||
|
||||
|
48
dwm.c
48
dwm.c
@ -435,9 +435,17 @@ static void zoom(const Arg *arg);
|
||||
|
||||
/* variables */
|
||||
static const char broken[] = "broken";
|
||||
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
|
||||
static char stext[1024];
|
||||
#else
|
||||
static char stext[256];
|
||||
#endif // STATUS2D_PATCH
|
||||
#if EXTRABAR_PATCH
|
||||
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
|
||||
static char estext[1024];
|
||||
#else
|
||||
static char estext[256];
|
||||
#endif // STATUS2D_PATCH
|
||||
#endif // EXTRABAR_PATCH
|
||||
static int screen;
|
||||
static int sw, sh; /* X display screen geometry width, height */
|
||||
@ -1002,7 +1010,11 @@ cleanup(void)
|
||||
#endif // SYSTRAY_PATCH
|
||||
for (i = 0; i < CurLast; i++)
|
||||
drw_cur_free(drw, cursor[i]);
|
||||
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
|
||||
for (i = 0; i < LENGTH(colors) + 1; i++)
|
||||
#else
|
||||
for (i = 0; i < LENGTH(colors); i++)
|
||||
#endif // STATUS2D_PATCH
|
||||
free(scheme[i]);
|
||||
free(scheme);
|
||||
XDestroyWindow(dpy, wmcheckwin);
|
||||
@ -1490,11 +1502,7 @@ drawbar(Monitor *m)
|
||||
|
||||
#if SYSTRAY_PATCH
|
||||
if (showsystray && m == systraytomon(m))
|
||||
#if BARPADDING_PATCH
|
||||
stw = getsystraywidth() + 2 * sp;
|
||||
#else
|
||||
stw = getsystraywidth();
|
||||
#endif // BARPADDING_PATCH
|
||||
stw += getsystraywidth();
|
||||
#endif // SYSTRAY_PATCH
|
||||
|
||||
/* draw status first so it can be overdrawn by tags later */
|
||||
@ -1527,6 +1535,8 @@ drawbar(Monitor *m)
|
||||
*ts = ctmp;
|
||||
tp = ++ts;
|
||||
}
|
||||
#elif STATUS2D_PATCH
|
||||
tw = m->ww - drawstatusbar(m, bh, stext, stw, stp);
|
||||
#else // STATUSCOLORS_PATCH
|
||||
#if STATUSPADDING_PATCH
|
||||
tw = TEXTW(stext);
|
||||
@ -3074,18 +3084,22 @@ setup(void)
|
||||
strcpy(colors[SchemeTitleSel][ColBg], title_bg_dark);
|
||||
}
|
||||
#endif // VTCOLORS_PATCH
|
||||
scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
|
||||
for (i = 0; i < LENGTH(colors); i++)
|
||||
scheme[i] = drw_scm_create(drw, colors[i],
|
||||
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
|
||||
scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *));
|
||||
#if ALPHA_PATCH
|
||||
alphas[i],
|
||||
#endif // ALPHA_PATCH
|
||||
#if FLOAT_BORDER_COLOR_PATCH
|
||||
4
|
||||
scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], alphas[0], ColCount);
|
||||
#else
|
||||
3
|
||||
#endif // FLOAT_BORDER_COLOR_PATCH
|
||||
);
|
||||
scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], ColCount);
|
||||
#endif // ALPHA_PATCH | FLOAT_BORDER_COLOR_PATCH
|
||||
#else
|
||||
scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
|
||||
#endif // STATUS2D_PATCH
|
||||
for (i = 0; i < LENGTH(colors); i++)
|
||||
#if ALPHA_PATCH
|
||||
scheme[i] = drw_scm_create(drw, colors[i], alphas[i], ColCount);
|
||||
#else
|
||||
scheme[i] = drw_scm_create(drw, colors[i], ColCount);
|
||||
#endif // ALPHA_PATCH
|
||||
#if SYSTRAY_PATCH
|
||||
/* init system tray */
|
||||
if (showsystray)
|
||||
@ -3907,7 +3921,11 @@ updatestatus(void)
|
||||
Monitor* m;
|
||||
#endif // STATUSALLMONS_PATCH
|
||||
#if EXTRABAR_PATCH
|
||||
#if STATUS2D_PATCH
|
||||
char text[1024];
|
||||
#else
|
||||
char text[512];
|
||||
#endif // STATUS2D_PATCH
|
||||
if (!gettextprop(root, XA_WM_NAME, text, sizeof(text))) {
|
||||
strcpy(stext, "dwm-"VERSION);
|
||||
estext[0] = '\0';
|
||||
|
@ -122,6 +122,9 @@
|
||||
#if STACKER_PATCH
|
||||
#include "stacker.c"
|
||||
#endif
|
||||
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
|
||||
#include "status2d.c"
|
||||
#endif
|
||||
#if STATUSCOLORS_PATCH
|
||||
#include "statuscolors.c"
|
||||
#endif
|
||||
|
@ -125,6 +125,9 @@
|
||||
#if STACKER_PATCH
|
||||
#include "stacker.h"
|
||||
#endif
|
||||
#if STATUS2D_PATCH && !STATUSCOLORS_PATCH
|
||||
#include "status2d.h"
|
||||
#endif
|
||||
#if STATUSCMD_PATCH
|
||||
#include "statuscmd.h"
|
||||
#endif
|
||||
|
128
patch/status2d.c
Normal file
128
patch/status2d.c
Normal file
@ -0,0 +1,128 @@
|
||||
int
|
||||
drawstatusbar(Monitor *m, int bh, char* stext, int stw, int stp)
|
||||
{
|
||||
int ret, i, w, x, len;
|
||||
short isCode = 0;
|
||||
char *text;
|
||||
char *p;
|
||||
|
||||
len = strlen(stext) + 1 ;
|
||||
if (!(text = (char*) malloc(sizeof(char)*len)))
|
||||
die("malloc");
|
||||
p = text;
|
||||
memcpy(text, stext, len);
|
||||
|
||||
/* compute width of the status text */
|
||||
w = stp * 2;;
|
||||
i = -1;
|
||||
while (text[++i]) {
|
||||
if (text[i] == '^') {
|
||||
if (!isCode) {
|
||||
isCode = 1;
|
||||
text[i] = '\0';
|
||||
w += TEXTW(text) - lrpad;
|
||||
text[i] = '^';
|
||||
if (text[++i] == 'f')
|
||||
w += atoi(text + ++i);
|
||||
} else {
|
||||
isCode = 0;
|
||||
text = text + i + 1;
|
||||
i = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!isCode)
|
||||
w += TEXTW(text) - lrpad;
|
||||
else
|
||||
isCode = 0;
|
||||
text = p;
|
||||
w += 2; /* 1px padding on both sides */
|
||||
x = m->ww - w - stw + stp;
|
||||
ret = m->ww - w;
|
||||
|
||||
drw_setscheme(drw, scheme[LENGTH(colors)]);
|
||||
drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
|
||||
drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
|
||||
drw_rect(drw, x - stp - 1, 0, w, bh, 1, 1);
|
||||
x++;
|
||||
|
||||
/* process status text */
|
||||
i = -1;
|
||||
while (text[++i]) {
|
||||
if (text[i] == '^' && !isCode) {
|
||||
isCode = 1;
|
||||
|
||||
text[i] = '\0';
|
||||
w = TEXTW(text) - lrpad;
|
||||
drw_text(drw, x, 0, w, bh, 0, text, 0);
|
||||
|
||||
x += w;
|
||||
|
||||
/* process code */
|
||||
while (text[++i] != '^') {
|
||||
if (text[i] == 'c') {
|
||||
char buf[8];
|
||||
if (i + 7 > len) {
|
||||
i += 7;
|
||||
break;
|
||||
}
|
||||
memcpy(buf, (char*)text+i+1, 7);
|
||||
buf[7] = '\0';
|
||||
#if ALPHA_PATCH && STATUS2D_NO_ALPHA_PATCH
|
||||
drw_clr_create(drw, &drw->scheme[ColFg], buf, 0xff);
|
||||
#elif ALPHA_PATCH
|
||||
drw_clr_create(drw, &drw->scheme[ColFg], buf, alphas[SchemeNorm][ColFg]);
|
||||
#else
|
||||
drw_clr_create(drw, &drw->scheme[ColFg], buf);
|
||||
#endif // ALPHA_PATCH
|
||||
i += 7;
|
||||
} else if (text[i] == 'b') {
|
||||
char buf[8];
|
||||
if (i + 7 > len) {
|
||||
i += 7;
|
||||
break;
|
||||
}
|
||||
memcpy(buf, (char*)text+i+1, 7);
|
||||
buf[7] = '\0';
|
||||
#if ALPHA_PATCH && STATUS2D_NO_ALPHA_PATCH
|
||||
drw_clr_create(drw, &drw->scheme[ColBg], buf, 0xff);
|
||||
#elif ALPHA_PATCH
|
||||
drw_clr_create(drw, &drw->scheme[ColBg], buf, alphas[SchemeNorm][ColBg]);
|
||||
#else
|
||||
drw_clr_create(drw, &drw->scheme[ColBg], buf);
|
||||
#endif // ALPHA_PATCH
|
||||
i += 7;
|
||||
} else if (text[i] == 'd') {
|
||||
drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
|
||||
drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
|
||||
} else if (text[i] == 'r') {
|
||||
int rx = atoi(text + ++i);
|
||||
while (text[++i] != ',');
|
||||
int ry = atoi(text + ++i);
|
||||
while (text[++i] != ',');
|
||||
int rw = atoi(text + ++i);
|
||||
while (text[++i] != ',');
|
||||
int rh = atoi(text + ++i);
|
||||
|
||||
drw_rect(drw, rx + x, ry, rw, rh, 1, 0);
|
||||
} else if (text[i] == 'f') {
|
||||
x += atoi(text + ++i);
|
||||
}
|
||||
}
|
||||
|
||||
text = text + i + 1;
|
||||
i=-1;
|
||||
isCode = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isCode) {
|
||||
w = TEXTW(text) - lrpad;
|
||||
drw_text(drw, x, 0, w, bh, 0, text, 0);
|
||||
}
|
||||
|
||||
drw_setscheme(drw, scheme[SchemeNorm]);
|
||||
free(p);
|
||||
|
||||
return ret;
|
||||
}
|
1
patch/status2d.h
Normal file
1
patch/status2d.h
Normal file
@ -0,0 +1 @@
|
||||
static int drawstatusbar(Monitor *m, int bh, char* text, int stw, int stp);
|
@ -1,4 +1,8 @@
|
||||
#if STATUS2D_PATCH
|
||||
static char rawstext[1024];
|
||||
#else
|
||||
static char rawstext[256];
|
||||
#endif // STATUS2D_PATCH
|
||||
#if !DWMBLOCKS_PATCH
|
||||
static const char statusexport[] = "export BUTTON=-;";
|
||||
static int statuscmdn;
|
||||
|
@ -495,6 +495,18 @@
|
||||
*/
|
||||
#define STACKER_PATCH 0
|
||||
|
||||
/* Status2d allows colors and rectangle drawing in the dwm status bar.
|
||||
* This patch is incompatible with the statuscolors patch which takes precedence.
|
||||
* This patch is incompatible with the extrabar patch.
|
||||
* NB: If using this with dwmblocks then make sure to increase CMDLENGTH in dwmblocks.c
|
||||
* from 50 (default) to 1024.
|
||||
* https://dwm.suckless.org/patches/status2d/
|
||||
*/
|
||||
#define STATUS2D_PATCH 0
|
||||
|
||||
/* Supplementary patch should you want to disable alpha for the status2d section */
|
||||
#define STATUS2D_NO_ALPHA_PATCH 0
|
||||
|
||||
/* This patch draws and updates the statusbar on all monitors.
|
||||
* https://dwm.suckless.org/patches/statusallmons/
|
||||
*/
|
||||
@ -502,6 +514,7 @@
|
||||
|
||||
/* This patch enables colored text in the status bar. It changes the way colors are defined
|
||||
* in config.h allowing multiple color combinations for use in the status script.
|
||||
* This patch is incompatible with and takes precedence over the status2d patch.
|
||||
* https://dwm.suckless.org/patches/statuscolors/
|
||||
*/
|
||||
#define STATUSCOLORS_PATCH 0
|
||||
|
Loading…
Reference in New Issue
Block a user