You are not logged in.
Has anyone by any chance got a patch for this lying around already?
The nature of dwm is that official patches are applied to the stock dwm.c. When applying >1 patch, you should expect to manually apply the diffs. Also, you should probably create a support thread for this.
All configs @ https://github.com/w0ng
Offline
ivoarch wrote:Prefix-key.diff - Ratpoison/StumpWM style (using prefix key).
- Autor: matt mooney
- Modified: ivoAny chance you expand a little about what this does and how to use it?
I was interested too but the link is broken
You can like linux without becoming a fanatic!
Offline
Otherwise you could try a Google search... there are numerous links popping up that have an older version of prefix key patch.
If you can't sit by a cozy fire with your code in hand enjoying its simplicity and clarity, it needs more work. --Carlos Torres
Offline
markoer wrote:@pks
if there is more than one client in stack you can see gap which increases every time a new client is spawned in stack
Yeah, I've spotted that issue as well, it's some kind of rounding error. I'll think of a fix.
Edit: I've updated the patch, it works for me now without the increasing-gaps-issue.
diff --git a/config.def.h b/config.def.h index 875885b..3dbd05f 100644 --- a/config.def.h +++ b/config.def.h @@ -65,6 +65,8 @@ static Key keys[] = { { MODKEY, XK_d, incnmaster, {.i = -1 } }, { MODKEY, XK_h, setmfact, {.f = -0.05} }, { MODKEY, XK_l, setmfact, {.f = +0.05} }, + { MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.05} }, + { MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.05} }, { MODKEY, XK_Return, zoom, {0} }, { MODKEY, XK_Tab, view, {0} }, { MODKEY|ShiftMask, XK_c, killclient, {0} }, diff --git a/dwm.c b/dwm.c index 1bbb4b3..f16ab61 100644 --- a/dwm.c +++ b/dwm.c @@ -86,6 +86,7 @@ typedef struct Client Client; struct Client { char name[256]; float mina, maxa; + float cfact; int x, y, w, h; int oldx, oldy, oldw, oldh; int basew, baseh, incw, inch, maxw, maxh, minw, minh; @@ -200,6 +201,7 @@ static void setclientstate(Client *c, long state); static void setfocus(Client *c); static void setfullscreen(Client *c, Bool fullscreen); static void setlayout(const Arg *arg); +static void setcfact(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); static void showhide(Client *c); @@ -1027,6 +1029,7 @@ manage(Window w, XWindowAttributes *wa) { c->w = c->oldw = wa->width; c->h = c->oldh = wa->height; c->oldbw = wa->border_width; + c->cfact = 1.0; if(c->x + WIDTH(c) > c->mon->mx + c->mon->mw) c->x = c->mon->mx + c->mon->mw - WIDTH(c); @@ -1473,6 +1476,21 @@ setlayout(const Arg *arg) { drawbar(selmon); } +void setcfact(const Arg *arg) { + float f; + Client *c; + + c = selmon->sel; + + if(!arg || !c || !selmon->lt[selmon->sellt]->arrange) + return; + f = arg->f + c->cfact; + if(f < 0.25 || f > 4.0) + return; + c->cfact = f; + arrange(selmon); +} + /* arg > 1.0 will set mfact absolutly */ void setmfact(const Arg *arg) { @@ -1602,9 +1620,15 @@ tagmon(const Arg *arg) { void tile(Monitor *m) { unsigned int i, n, h, mw, my, ty; + float mfacts = 0, sfacts = 0; Client *c; - for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { + if(n < m->nmaster) + mfacts += c->cfact; + else + sfacts += c->cfact; + } if(n == 0) return; @@ -1614,14 +1638,16 @@ tile(Monitor *m) { mw = m->ww; for(i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) if(i < m->nmaster) { - h = (m->wh - my) / (MIN(n, m->nmaster) - i); + h = (m->wh - my) * (c->cfact / mfacts) + 0.5; resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), False); my += HEIGHT(c); + mfacts -= c->cfact; } else { - h = (m->wh - ty) / (n - i); + h = (m->wh - ty) * (c->cfact / sfacts) + 0.5; resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), False); ty += HEIGHT(c); + sfacts -= c->cfact; } }
This patch is awesome! Thanks. I was just what i was looking for.
Offline
Where is a good place to get support for DWM?
When I run 'startx' and have 'exec dwm' in my .xinitrc, the screen goes pitch black and no key bindings worked. I installed i3 and it loaded fine, so I'm not sure the issue is with xorg. I've 'sudo make uninstall', and then downloaded a vanilla dwm-6.0.tar.gz to reinstall. That still doesn't work.
I run dwm on another virtual machine and it works great! I love all the patches and configs!
Offline
Not here. Set up dwm to log any errors to a file and then open a support thread with the debugging information.
while true; do
dwm 2> ~/dwm.log
done
Your Xorg log would also be relevant.
Offline
Thanks Jason. I did use that dwm-start, but it didn't produce anything meaningful. I'll do as suggested.
Offline
Is there a patch for chorded key combinations like in Emacs? I know about the command mode patch (vim-like command+insert mode), but it's only a single mode, while I need multiple.
I come from i3, where modes are built-in. For example, pressing Mod4+U enables a mode where all 'U'tils are single key press. "Mod4+U,H" is htop, "Mod4+U,A" is alsamixer, etc. I have another mode (Mod4+C) for internet-related apps, then couple of more modes for other app categories and folders.
I just don't have enough keyboard keys for all the things I need, so I resorted to this.
Alternatively, I *think* I could use xbindkeys for a wm-agnostic key combos, but I haven't had success yet (need to RTFM more).
There are two types of people in this world - those who can count to 10 by using their fingers, and those who can count to 1023.
Offline
Is there a patch for chorded key combinations like in Emacs? I know about the command mode patch (vim-like command+insert mode), but it's only a single mode, while I need multiple.
I come from i3, where modes are built-in. For example, pressing Mod4+U enables a mode where all 'U'tils are single key press. "Mod4+U,H" is htop, "Mod4+U,A" is alsamixer, etc. I have another mode (Mod4+C) for internet-related apps, then couple of more modes for other app categories and folders.
I just don't have enough keyboard keys for all the things I need, so I resorted to this.Alternatively, I *think* I could use xbindkeys for a wm-agnostic key combos, but I haven't had success yet (need to RTFM more).
You should take a look at sxhkd [1] as an alternative to xbindkeys. It supports chorded key combinations, as well.
Offline
spupy wrote:Is there a patch for chorded key combinations like in Emacs? I know about the command mode patch (vim-like command+insert mode), but it's only a single mode, while I need multiple.
I come from i3, where modes are built-in. For example, pressing Mod4+U enables a mode where all 'U'tils are single key press. "Mod4+U,H" is htop, "Mod4+U,A" is alsamixer, etc. I have another mode (Mod4+C) for internet-related apps, then couple of more modes for other app categories and folders.
I just don't have enough keyboard keys for all the things I need, so I resorted to this.Alternatively, I *think* I could use xbindkeys for a wm-agnostic key combos, but I haven't had success yet (need to RTFM more).
You should take a look at sxhkd [1] as an alternative to xbindkeys. It supports chorded key combinations, as well.
This looks like exactly what I'm looking for! Thank you very much!
There are two types of people in this world - those who can count to 10 by using their fingers, and those who can count to 1023.
Offline
Has anyone had any success porting the ansistatuscolors patch (or any equivalent) to 6.1? I'm not familiar enough with the code to make those changes myself. The changes that added drw.[hc] broke most of the graphical patches, such as Xft, pango, statuscolors, etc.
I would be using 6.0 but I simply cannot live without the multi-monitor patches for 6.1 ATM.
Any help is appreciated.
//edits: grammar, wrong patch name!
Last edited by spychalski (2014-05-11 21:58:41)
Offline
I dont know about ansistatuscolors, but my repo does have Pango implemented in 6.1. Feep free to check it out.
If you can't sit by a cozy fire with your code in hand enjoying its simplicity and clarity, it needs more work. --Carlos Torres
Offline
I have hand-patched runorraise in dwm-6.0. The build is successful and dwm seems to be working fine, but I have a warning message during build:
dwm.c: In function ‘runorraise’:
dwm.c:1452:25: warning: initialization discards ‘const’ qualifier from pointer target type
const char **app = arg->v;
^
and the function:
void
runorraise(const Arg *arg) {
const char **app = arg->v;
Arg a = { .ui = ~0 };
Monitor *mon;
Client *c;
XClassHint hint = { NULL, NULL };
for (mon = mons; mon; mon = mon->next) {
for (c = mon->clients; c; c = c->next) {
XGetClassHint(dpy, c->win, &hint);
if (hint.res_class && strcmp(app[2], hint.res_class) == 0) {
a.ui = c->tags;
view(&a);
focus(c);
return;
}
}
}
spawn(arg);
}
My C knowledge is very limited. Can anyone tell how to fix it?
Offline
Omit the 'const' keyword.
Nothing is too wonderful to be true, if it be consistent with the laws of nature -- Michael Faraday
Sometimes it is the people no one can imagine anything of who do the things no one can imagine. -- Alan Turing
---
How to Ask Questions the Smart Way
Offline
Try this one - http://dwm.suckless.org/patches/runorraise
Offline
@ ewaller
I have the same warning without const keyword.
@ivoarch
I tried but this patch does not work (at least for 6.0) - it does not find the client so that just gets opened again and again.
Offline
@ ewaller
I have the same warning without const keyword.
Actually, you had to add a const. The correct line would be :
const char * const * app = arg->v;
Offline
I've tested it and it works prefect on dwm 6.0
Something is wrong in your config.h?
// example for run or raise Firefox
static const char *browser[] = { "firefox", NULL, NULL, NULL, "Firefox" }
{ Modkey, XK_f, runorraise, {.v = browser } },
Last edited by ivoarch (2014-05-17 08:28:09)
Offline
@jpgg
Perfect, it builds now without warning!
@ivoarch
You are also right as in my config.h I have less arguments
static const char *term[] = { "urxvtc", NULL, "URxvt" };
but to be honest I have not tried it since jpgg's solution is simpler in this case. Thanks, both of you!
Offline
Try using wmname is mentioned in dwm's man page!
wmname LG3D
it works for android studio/jdk6. thx.
Offline
Has anyone had any success porting the ansistatuscolors patch (or any equivalent) to 6.1? I'm not familiar enough with the code to make those changes myself. The changes that added drw.[hc] broke most of the graphical patches, such as Xft, pango, statuscolors, etc.
I would be using 6.0 but I simply cannot live without the multi-monitor patches for 6.1 ATM.
Any help is appreciated.
//edits: grammar, wrong patch name!
Hi, I just made a patch for something similar to statuscolor. I did the best I could. I am sure many people in this forum can do it better. It has some limitations, only works with dwmstatus and by default it has 4 colors. You can see the code in my repo (https://github.com/algui91/myDWM/blob/m … color.diff).
My current config is in the `myconfig` branch (https://github.com/algui91/myDWM/tree/myconfig).
Also, If you do not have any code for dwmstatus, here is mine (https://github.com/algui91/myDWMstatus), it has some hard coded things, like the net (eth0, wlan0 etc), but that is easily editable.
Here is an screenshot link here (http://i.imgbox.com/dUIp8myK.png):
Hope it helps!, And everyone feel free to improve my patch.
Best regards.
Last edited by algui91 (2014-07-24 16:11:19)
Offline
Took another crack at statuscolours, got something satisfactory, I guess.
diff --git a/config.def.h b/config.def.h
index 875885b..c80255b 100644
--- a/config.def.h
+++ b/config.def.h
@@ -2,12 +2,12 @@
/* appearance */
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
-static const char normbordercolor[] = "#444444";
-static const char normbgcolor[] = "#222222";
-static const char normfgcolor[] = "#bbbbbb";
-static const char selbordercolor[] = "#005577";
-static const char selbgcolor[] = "#005577";
-static const char selfgcolor[] = "#eeeeee";
+static const char schemes[NUMSCHEMES][ColLast][8] = {
+ /* border background foreground */
+ { "#444444", "#222222", "#bbbbbb" }, /* 1 = normal */
+ { "#005577", "#005577", "#eeeeee" }, /* 2 = selected */
+ { "#aa4444", "#222222", "#aa4444" }, /* 3 = urgent */
+};
static const unsigned int borderpx = 1; /* border pixel of windows */
static const unsigned int snap = 32; /* snap pixel */
static const Bool showbar = True; /* False means no bar */
@@ -51,7 +51,7 @@ static const Layout layouts[] = {
/* commands */
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
+static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", font, "-nb", schemes[0][ColBG], "-nf", schemes[0][ColFG], "-sb", schemes[1][ColBG], "-sf", schemes[1][ColFG], NULL };
static const char *termcmd[] = { "st", NULL };
static Key keys[] = {
diff --git a/drw.c b/drw.c
index b130405..fcb6003 100644
--- a/drw.c
+++ b/drw.c
@@ -126,12 +126,12 @@ drw_setscheme(Drw *drw, ClrScheme *scheme) {
}
void
-drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert) {
+drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty) {
int dx;
if(!drw || !drw->font || !drw->scheme)
return;
- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->bg->rgb : drw->scheme->fg->rgb);
+ XSetForeground(drw->dpy, drw->gc, drw->scheme->fg->rgb);
dx = (drw->font->ascent + drw->font->descent + 2) / 4;
if(filled)
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x+1, y+1, dx+1, dx+1);
@@ -140,22 +140,22 @@ drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int
}
void
-drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int invert) {
+drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int pad) {
char buf[256];
int i, tx, ty, th, len, olen;
Extnts tex;
if(!drw || !drw->scheme)
return;
- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->fg->rgb : drw->scheme->bg->rgb);
+ XSetForeground(drw->dpy, drw->gc, drw->scheme->bg->rgb);
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
if(!text || !drw->font)
return;
olen = strlen(text);
drw_font_getexts(drw->font, text, olen, &tex);
- th = drw->font->ascent + drw->font->descent;
- ty = y + (h / 2) - (th / 2) + drw->font->ascent;
- tx = x + (h / 2);
+ th = pad ? (drw->font->ascent + drw->font->descent) : 0;
+ ty = y + ((h + drw->font->ascent - drw->font->descent) / 2);
+ tx = x + (th / 2);
/* shorten text if necessary */
for(len = MIN(olen, sizeof buf); len && (tex.w > w - tex.h || w < tex.h); len--)
drw_font_getexts(drw->font, text, len, &tex);
@@ -164,7 +164,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *tex
memcpy(buf, text, len);
if(len < olen)
for(i = len; i && i > len - 3; buf[--i] = '.');
- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme->bg->rgb : drw->scheme->fg->rgb);
+ XSetForeground(drw->dpy, drw->gc, drw->scheme->fg->rgb);
if(drw->font->set)
XmbDrawString(drw->dpy, drw->drawable, drw->font->set, drw->gc, tx, ty, buf, len);
else
@@ -182,18 +182,30 @@ drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h) {
void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, Extnts *tex) {
+ /* remove non-printing color codes before calculating width */
+ char *ptr = (char *) text;
+ unsigned int i, ibuf;
+ char buf[len + 1];
XRectangle r;
+ for(i = 0, ibuf = 0; *ptr && i < len; i++, ptr++) {
+ if(!(*ptr <= NUMSCHEMES && *ptr > 0)) {
+ buf[ibuf] = *ptr;
+ ibuf++;
+ }
+ }
+ buf[ibuf] = 0;
+
if(!font || !text)
return;
if(font->set) {
- XmbTextExtents(font->set, text, len, NULL, &r);
+ XmbTextExtents(font->set, buf, ibuf, NULL, &r);
tex->w = r.width;
tex->h = r.height;
}
else {
tex->h = font->ascent + font->descent;
- tex->w = XTextWidth(font->xfont, text, len);
+ tex->w = XTextWidth(font->xfont, buf, ibuf);
}
}
diff --git a/drw.h b/drw.h
index a5f34e0..dac0184 100644
--- a/drw.h
+++ b/drw.h
@@ -1,5 +1,7 @@
/* See LICENSE file for copyright and license details. */
+#define NUMSCHEMES 3
+
typedef struct {
unsigned long rgb;
} Clr;
@@ -62,8 +64,8 @@ void drw_setfont(Drw *drw, Fnt *font);
void drw_setscheme(Drw *drw, ClrScheme *scheme);
/* Drawing functions */
-void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty, int invert);
-void drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int invert);
+void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int empty);
+void drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text, int pad);
/* Map functions */
void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);
diff --git a/dwm.c b/dwm.c
index f896170..9ae2fb0 100644
--- a/dwm.c
+++ b/dwm.c
@@ -59,6 +59,7 @@
/* enums */
enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */
+enum { ColBorder, ColBG, ColFG, ColLast }; /* scheme elements */
enum { NetSupported, NetWMName, NetWMState,
NetWMFullscreen, NetActiveWindow, NetWMWindowType,
NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
@@ -163,6 +164,7 @@ static void detachstack(Client *c);
static Monitor *dirtomon(int dir);
static void drawbar(Monitor *m);
static void drawbars(void);
+static void drawcoloredtext(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text);
static void enternotify(XEvent *e);
static void expose(XEvent *e);
static void focus(Client *c);
@@ -260,7 +262,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
static Atom wmatom[WMLast], netatom[NetLast];
static Bool running = True;
static Cur *cursor[CurLast];
-static ClrScheme scheme[SchemeLast];
+static ClrScheme scheme[NUMSCHEMES];
static Display *dpy;
static Drw *drw;
static Fnt *fnt;
@@ -691,6 +693,32 @@ dirtomon(int dir) {
}
void
+drawcoloredtext(Drw *drw, int x, int y, unsigned int w, unsigned int h, const char *text) {
+ char *buf = (char *)text, *ptr = buf, c = 1;
+ ClrScheme col = scheme[SchemeNorm];
+ int i, ox = x;
+
+ while(*ptr) {
+ for(i = 0; *ptr < 0 || *ptr > NUMSCHEMES; i++, ptr++);
+ if(!*ptr) break;
+ c = *ptr;
+ *ptr = 0;
+ if(i) {
+ w = selmon->ww - x;
+ drw_setscheme(drw, &col);
+ drw_text(drw, x, 0, w, bh, buf, 1);
+ x += drw_font_getexts_width(drw->font, buf, i);
+ }
+ *ptr = c;
+ col = scheme[c - 1];
+ buf = ++ptr;
+ }
+ drw_setscheme(drw, &col);
+ drw_text(drw, x, 0, w, bh, buf, 1);
+ x = ox;
+}
+
+void
drawbar(Monitor *m) {
int x, xx, w;
unsigned int i, occ = 0, urg = 0;
@@ -704,15 +732,15 @@ drawbar(Monitor *m) {
x = 0;
for(i = 0; i < LENGTH(tags); i++) {
w = TEXTW(tags[i]);
- drw_setscheme(drw, m->tagset[m->seltags] & 1 << i ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
- drw_text(drw, x, 0, w, bh, tags[i], urg & 1 << i);
+ drw_setscheme(drw, &scheme[(m->tagset[m->seltags] & 1 << i) ? 1 : (urg & 1 << i ? 2:0)]);
+ drw_text(drw, x, 0, w, bh, tags[i], 1);
drw_rect(drw, x, 0, w, bh, m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
- occ & 1 << i, urg & 1 << i);
+ occ & 1 << i);
x += w;
}
w = blw = TEXTW(m->ltsymbol);
drw_setscheme(drw, &scheme[SchemeNorm]);
- drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
+ drw_text(drw, x, 0, w, bh, m->ltsymbol, 1);
x += w;
xx = x;
if(m == selmon) { /* status is only drawn on selected monitor */
@@ -722,16 +750,16 @@ drawbar(Monitor *m) {
x = xx;
w = m->ww - xx;
}
- drw_text(drw, x, 0, w, bh, stext, 0);
+ drawcoloredtext(drw, x, 0, w, bh, stext);
}
else
x = m->ww;
if((w = x - xx) > bh) {
x = xx;
if(m->sel) {
- drw_setscheme(drw, m == selmon ? &scheme[SchemeSel] : &scheme[SchemeNorm]);
- drw_text(drw, x, 0, w, bh, m->sel->name, 0);
- drw_rect(drw, x, 0, w, bh, m->sel->isfixed, m->sel->isfloating, 0);
+ drw_setscheme(drw, &scheme[m == selmon ? SchemeSel : SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, m->sel->name, 1);
+ drw_rect(drw, x, 0, w, bh, m->sel->isfixed, m->sel->isfloating);
}
else {
drw_setscheme(drw, &scheme[SchemeNorm]);
@@ -1531,12 +1559,11 @@ setup(void) {
cursor[CurResize] = drw_cur_create(drw, XC_sizing);
cursor[CurMove] = drw_cur_create(drw, XC_fleur);
/* init appearance */
- scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
- scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
- scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
- scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
- scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
- scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
+ for(int i = 0; i < NUMSCHEMES; i++) {
+ scheme[i].border = drw_clr_create(drw, schemes[i][ColBorder]);
+ scheme[i].bg = drw_clr_create(drw, schemes[i][ColBG]);
+ scheme[i].fg = drw_clr_create(drw, schemes[i][ColFG]);
+ }
/* init bars */
updatebars();
updatestatus();
@@ -1957,8 +1984,11 @@ updatewmhints(Client *c) {
wmh->flags &= ~XUrgencyHint;
XSetWMHints(dpy, c->win, wmh);
}
- else
+ else {
c->isurgent = (wmh->flags & XUrgencyHint) ? True : False;
+ if(c->isurgent)
+ XSetWindowBorder(dpy, c->win, scheme[SchemeLast].border->rgb);
+ }
if(wmh->flags & InputHint)
c->neverfocus = !wmh->input;
else
Spacing issues still exist. As the patch stands this still happens:
For instance, in
xsetroot -name "$(printf "a\x01b\x02c")"
both `a` and `b` would get buried.
On the other hand, changing whether pad is 0 or 1 in calls to drw_text will juggle between fixing the above and introducing other spacing bugs.
Offline
So I've been sloppily trying to get a couple things working, and my near-nonexistent C skills and knowledge have left me stumped. The first thing is this centerclock patch; I'd like the clock to be displayed on the far right of the statusbar---next to the status text---and leave the maximum width of the section at the number of characters in the clock text. I haven't quite figured out how to draw the clock text in its own section rather than replacing the status or window title text.
The second thing is to just change the window border color from dc.sel[ColBorder] to dc.norm[ColBG] in the monocle layout, to match the statusbar. This removes the visual distraction of the border, but leaves a few pixels of padding around the screen edge and below the statusbar text. If I've only got one window visible I'm in monocle mode anyway, so something like the better-borders and noborders patches seems like overkill. I've sort of figured out how this might work, but nothing reliable. Like I said, I don't really grok C.
I'm using dwm 6.0. I've been fumbling around with this for two days, so if anyone's got some pointers, or is willing to make those modifications, I'd be grateful.
Offline
I don't know if this is here already here, but, I will still post it.
In the screenshots the font is set to Comic Sans.
Use different font for status text and for the layout text:
diff -u a/config.def.h b/config.def.h
--- a/config.def.h 2014-08-27 22:37:22.405306000 +0300
+++ b/config.def.h 2014-08-30 21:19:24.349576945 +0300
@@ -2,6 +2,7 @@
/* appearance */
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
+static const char font2[] = "-*-tamsynmod-medium-r-*-*-16-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#444444";
static const char normbgcolor[] = "#222222";
static const char normfgcolor[] = "#bbbbbb";
diff -u a/dwm.c b/dwm.c
--- a/dwm.c 2014-08-27 22:37:22.405306000 +0300
+++ b/dwm.c 2014-08-30 21:04:05.039559679 +0300
@@ -263,7 +263,7 @@
static ClrScheme scheme[SchemeLast];
static Display *dpy;
static Drw *drw;
-static Fnt *fnt;
+static Fnt *fnt, *fnt2;
static Monitor *mons, *selmon;
static Window root;
@@ -475,6 +475,7 @@
drw_cur_free(drw, cursor[CurResize]);
drw_cur_free(drw, cursor[CurMove]);
drw_font_free(dpy, fnt);
+ drw_font_free(dpy, fnt2);
drw_clr_free(scheme[SchemeNorm].border);
drw_clr_free(scheme[SchemeNorm].bg);
drw_clr_free(scheme[SchemeNorm].fg);
@@ -710,6 +711,7 @@
occ & 1 << i, urg & 1 << i);
x += w;
}
+ drw_setfont(drw, fnt2);
w = blw = TEXTW(m->ltsymbol);
drw_setscheme(drw, &scheme[SchemeNorm]);
drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
@@ -739,6 +741,7 @@
}
}
drw_map(drw, m->barwin, 0, 0, m->ww, bh);
+ drw_setfont(drw, fnt);
}
void
@@ -1507,6 +1510,7 @@
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
fnt = drw_font_create(dpy, font);
+ fnt2 = drw_font_create(dpy, font2);
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
bh = fnt->h + 2;
Or just for the status text:
diff -u a/config.def.h b/config.def.h
--- a/config.def.h 2014-08-27 22:37:22.405306000 +0300
+++ b/config.def.h 2014-08-30 21:19:24.349576945 +0300
@@ -2,6 +2,7 @@
/* appearance */
static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
+static const char font2[] = "-*-tamsynmod-medium-r-*-*-16-*-*-*-*-*-*-*";
static const char normbordercolor[] = "#444444";
static const char normbgcolor[] = "#222222";
static const char normfgcolor[] = "#bbbbbb";
diff -u a/dwm.c b/dwm.c
--- a/dwm.c 2014-08-27 22:37:22.405306000 +0300
+++ b/dwm.c 2014-08-30 21:23:19.949581371 +0300
@@ -263,7 +263,7 @@
static ClrScheme scheme[SchemeLast];
static Display *dpy;
static Drw *drw;
-static Fnt *fnt;
+static Fnt *fnt, *fnt2;
static Monitor *mons, *selmon;
static Window root;
@@ -475,6 +475,7 @@
drw_cur_free(drw, cursor[CurResize]);
drw_cur_free(drw, cursor[CurMove]);
drw_font_free(dpy, fnt);
+ drw_font_free(dpy, fnt2);
drw_clr_free(scheme[SchemeNorm].border);
drw_clr_free(scheme[SchemeNorm].bg);
drw_clr_free(scheme[SchemeNorm].fg);
@@ -713,6 +714,7 @@
w = blw = TEXTW(m->ltsymbol);
drw_setscheme(drw, &scheme[SchemeNorm]);
drw_text(drw, x, 0, w, bh, m->ltsymbol, 0);
+ drw_setfont(drw, fnt2);
x += w;
xx = x;
if(m == selmon) { /* status is only drawn on selected monitor */
@@ -739,6 +741,7 @@
}
}
drw_map(drw, m->barwin, 0, 0, m->ww, bh);
+ drw_setfont(drw, fnt);
}
void
@@ -1507,6 +1510,7 @@
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
fnt = drw_font_create(dpy, font);
+ fnt2 = drw_font_create(dpy, font2);
sw = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen);
bh = fnt->h + 2;
Last edited by Nikiz (2014-08-30 18:52:10)
Offline
So I've been sloppily trying to get a couple things working, and my near-nonexistent C skills and knowledge have left me stumped. The first thing is this centerclock patch; I'd like the clock to be displayed on the far right of the statusbar---next to the status text---and leave the maximum width of the section at the number of characters in the clock text. I haven't quite figured out how to draw the clock text in its own section rather than replacing the status or window title text.
The second thing is to just change the window border color from dc.sel[ColBorder] to dc.norm[ColBG] in the monocle layout, to match the statusbar. This removes the visual distraction of the border, but leaves a few pixels of padding around the screen edge and below the statusbar text. If I've only got one window visible I'm in monocle mode anyway, so something like the better-borders and noborders patches seems like overkill. I've sort of figured out how this might work, but nothing reliable. Like I said, I don't really grok C.
I'm using dwm 6.0. I've been fumbling around with this for two days, so if anyone's got some pointers, or is willing to make those modifications, I'd be grateful.
I could come up with something in the next week or so, maybe next two weeks. University is starting again on monday, so I have some others things to take care of first.
If you can't sit by a cozy fire with your code in hand enjoying its simplicity and clarity, it needs more work. --Carlos Torres
Offline