- DWM 官网
http://dwm.suckless.org/
-
官网提供了很多增强补丁,个人用的比较顺手的有:
图片.png
-
http://dwm.suckless.org/patches/systray/
系统状态了 几乎是必须。
图片.png
-
http://dwm.suckless.org/patches/hide_vacant_tags/
隐藏没有应用的空Tag
图片.png
-
http://dwm.suckless.org/patches/pertag/
用来保持 tag 切换后的窗口布局。
-
http://dwm.suckless.org/patches/tab/
当使用全屏布局时,会显示当前tag的其他应用,类似windows的任务栏, 点击可切换。
图片.png
- 问题
但有点不舒服就是 文字是左对齐的,和色块没有居中。
- 解决
修改drawtab
方法中, 调用 drw_text
写窗口名字的部分, 改为 drw_text(drw, x, 0, w, th, lrpad / 2, c->name, 0);
,把lrpad边距传下去即可居中。
for (c = m->clients; c; c = c->next) {
if (!ISVISIBLE(c)) continue;
if (i >= m->ntabs) break;
if (m->tab_widths[i] > maxsize) m->tab_widths[i] = maxsize;
w = m->tab_widths[i];
drw_setscheme(drw, scheme[(c == m->sel) ? SchemeSel : SchemeNorm]);
drw_text(drw, x, 0, w, th, lrpad / 2, c->name, 0);
x += w;
++i;
}
-
http://dwm.suckless.org/patches/status2d/
用于彩色标题栏信息, 甚至可以绘制图形, 源码扩展也比较简单。
图片.png
- 问题
和 systray 有点点问题,会造成占位,显示不全等问题。
- 解决
解决也比较简单, 根本原因是drawstatusbar
方法没有计算systray的宽度偏移引起的, 修改源码即可
void
drawbar(Monitor *m) {
int x, w, sw = 0, stw = 0;
int boxs = drw->fonts->h / 9;
int boxw = drw->fonts->h / 6 + 2;
unsigned int i, occ = 0, urg = 0;
Client *c;
if (showsystray && m == systraytomon(m) && !systrayonleft)
stw = getsystraywidth(); //取得systray 造成的偏移
/* draw status first so it can be overdrawn by tags later */
if (m == selmon) { /* status is only drawn on selected monitor */
//drw_setscheme(drw, scheme[SchemeNorm]);
//int _sw = TEXTW(stext) - lrpad / 2 + 2; /* 2px extra right padding */
//drw_text(drw, m->ww - sw - stw, 0, sw, bh, lrpad / 2 - 2, stext, 0);
//printf(">>>>old sw %d\n", _sw);
//printf(">>>>old stw %d\n", stw);
sw = m->ww - drawstatusbar(m, bh, stw, stext); //传递过去
//printf(">>>>now sw %d\n\n", sw);
}
int
drawstatusbar(Monitor *m, int bh, int xoffset, char *stext) { //把偏移传过来
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 = 0;
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 */
ret = x = m->ww - w;
x -= xoffset; // 把偏移算进去
...
网友评论