| dwm-dualstatus-6.1.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| dwm-dualstatus-6.1.diff (4683B) | |
| --- | |
| 1 diff --git a/config.def.h b/config.def.h | |
| 2 index 7054c06..b96107a 100644 | |
| 3 --- a/config.def.h | |
| 4 +++ b/config.def.h | |
| 5 @@ -15,6 +15,7 @@ static const unsigned int borderpx = 1; /* bor… | |
| 6 static const unsigned int snap = 32; /* snap pixel */ | |
| 7 static const int showbar = 1; /* 0 means no bar */ | |
| 8 static const int topbar = 1; /* 0 means bottom bar */ | |
| 9 +static const int extrabar = 1; /* 0 means no extra bar… | |
| 10 | |
| 11 /* tagging */ | |
| 12 static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "… | |
| 13 @@ -62,6 +63,7 @@ static Key keys[] = { | |
| 14 { MODKEY, XK_p, spawn, {.v … | |
| 15 { MODKEY|ShiftMask, XK_Return, spawn, {.v … | |
| 16 { MODKEY, XK_b, togglebar, {0} … | |
| 17 + { MODKEY, XK_b, toggleextrabar, {0} … | |
| 18 { MODKEY, XK_j, focusstack, {.i … | |
| 19 { MODKEY, XK_k, focusstack, {.i … | |
| 20 { MODKEY, XK_i, incnmaster, {.i … | |
| 21 diff --git a/dwm.c b/dwm.c | |
| 22 index 0362114..9b7cd74 100644 | |
| 23 --- a/dwm.c | |
| 24 +++ b/dwm.c | |
| 25 @@ -141,6 +141,13 @@ typedef struct { | |
| 26 int monitor; | |
| 27 } Rule; | |
| 28 | |
| 29 +typedef struct { | |
| 30 + int y; | |
| 31 + int show; | |
| 32 + Window win; | |
| 33 + char text[256]; | |
| 34 +} Bar; | |
| 35 + | |
| 36 /* function declarations */ | |
| 37 static void applyrules(Client *c); | |
| 38 static int applysizehints(Client *c, int *x, int *y, int *w, int *h, in… | |
| 39 @@ -210,6 +217,7 @@ static void tag(const Arg *arg); | |
| 40 static void tagmon(const Arg *arg); | |
| 41 static void tile(Monitor *); | |
| 42 static void togglebar(const Arg *arg); | |
| 43 +static void toggleextrabar(const Arg *arg); | |
| 44 static void togglefloating(const Arg *arg); | |
| 45 static void toggletag(const Arg *arg); | |
| 46 static void toggleview(const Arg *arg); | |
| 47 @@ -266,6 +274,7 @@ static Display *dpy; | |
| 48 static Drw *drw; | |
| 49 static Monitor *mons, *selmon; | |
| 50 static Window root; | |
| 51 +static Bar eb; | |
| 52 | |
| 53 /* configuration, allows nested code to access above variables */ | |
| 54 #include "config.h" | |
| 55 @@ -477,6 +486,8 @@ cleanup(void) | |
| 56 while (m->stack) | |
| 57 unmanage(m->stack, 0); | |
| 58 XUngrabKey(dpy, AnyKey, AnyModifier, root); | |
| 59 + XUnmapWindow(dpy, eb.win); | |
| 60 + XDestroyWindow(dpy, eb.win); | |
| 61 while (mons) | |
| 62 cleanupmon(mons); | |
| 63 for (i = 0; i < CurLast; i++) | |
| 64 @@ -578,6 +589,7 @@ configurenotify(XEvent *e) | |
| 65 updatebars(); | |
| 66 for (m = mons; m; m = m->next) | |
| 67 XMoveResizeWindow(dpy, m->barwin, m->wx… | |
| 68 + XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y, … | |
| 69 focus(NULL); | |
| 70 arrange(NULL); | |
| 71 } | |
| 72 @@ -751,6 +763,9 @@ drawbar(Monitor *m) | |
| 73 } | |
| 74 } | |
| 75 drw_map(drw, m->barwin, 0, 0, m->ww, bh); | |
| 76 + drw_setscheme(drw, &scheme[SchemeNorm]); | |
| 77 + drw_text(drw, 0, 0, mons->ww, bh, eb.text, 0); | |
| 78 + drw_map(drw, eb.win, 0, 0, mons->ww, bh); | |
| 79 } | |
| 80 | |
| 81 void | |
| 82 @@ -1558,6 +1573,7 @@ setup(void) | |
| 83 root = RootWindow(dpy, screen); | |
| 84 drw = drw_create(dpy, screen, root, sw, sh); | |
| 85 drw_load_fonts(drw, fonts, LENGTH(fonts)); | |
| 86 + eb.show = extrabar; | |
| 87 if (!drw->fontcount) | |
| 88 die("no fonts could be loaded.\n"); | |
| 89 bh = drw->fonts[0]->h + 2; | |
| 90 @@ -1699,6 +1715,17 @@ togglebar(const Arg *arg) | |
| 91 } | |
| 92 | |
| 93 void | |
| 94 +toggleextrabar(const Arg *arg) | |
| 95 +{ | |
| 96 + if(selmon == mons) { | |
| 97 + eb.show = !eb.show; | |
| 98 + updatebarpos(selmon); | |
| 99 + XMoveResizeWindow(dpy, eb.win, selmon->wx, eb.y, selmon… | |
| 100 + arrange(selmon); | |
| 101 + } | |
| 102 +} | |
| 103 + | |
| 104 +void | |
| 105 togglefloating(const Arg *arg) | |
| 106 { | |
| 107 if (!selmon->sel) | |
| 108 @@ -1810,6 +1837,13 @@ updatebars(void) | |
| 109 XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor… | |
| 110 XMapRaised(dpy, m->barwin); | |
| 111 } | |
| 112 + if(!eb.win) { | |
| 113 + eb.win = XCreateWindow(dpy, root, mons->wx, eb.y, mons-… | |
| 114 + CopyFromParent, DefaultVisual(dp… | |
| 115 + CWOverrideRedirect|CWBackPixmap|… | |
| 116 + XDefineCursor(dpy, eb.win, cursor[CurNormal]->cursor); | |
| 117 + XMapRaised(dpy, eb.win); | |
| 118 + } | |
| 119 } | |
| 120 | |
| 121 void | |
| 122 @@ -1823,6 +1857,13 @@ updatebarpos(Monitor *m) | |
| 123 m->wy = m->topbar ? m->wy + bh : m->wy; | |
| 124 } else | |
| 125 m->by = -bh; | |
| 126 + if(m == mons && eb.show) { | |
| 127 + m->wh -= bh; | |
| 128 + eb.y = topbar ? m->wy + m->wh : m->wy; | |
| 129 + m->wy = m->topbar ? m->wy : m->wy + bh; | |
| 130 + } | |
| 131 + else | |
| 132 + eb.y = -bh; | |
| 133 } | |
| 134 | |
| 135 void | |
| 136 @@ -1992,8 +2033,21 @@ updatetitle(Client *c) | |
| 137 void | |
| 138 updatestatus(void) | |
| 139 { | |
| 140 - if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) | |
| 141 + char text[512]; | |
| 142 + if(!gettextprop(root, XA_WM_NAME, text, sizeof(text))) { | |
| 143 strcpy(stext, "dwm-"VERSION); | |
| 144 + eb.text[0] = '\0'; | |
| 145 + } | |
| 146 + else { | |
| 147 + char *e = strchr(text, ';'); | |
| 148 + if(e) { | |
| 149 + *e = '\0'; e++; | |
| 150 + strncpy(eb.text, e, sizeof(eb.text)-1); | |
| 151 + } | |
| 152 + else | |
| 153 + eb.text[0] = '\0'; | |
| 154 + strncpy(stext, text, sizeof(stext)-1); | |
| 155 + } | |
| 156 drawbar(selmon); | |
| 157 } | |
| 158 |