Re: dwm
Добавлено: 12.07.2007 15:54
Да это у меня есть. Просто философия dwm "на каждый пук свой патч" немного не совпала с моей.
Код:
--- dwm-4.2/config.h Wed May 30 14:20:42 2007
+++ dwm/config.h Sat Jun 23 11:24:14 2007
@@ -10,6 +10,7 @@
#define SELBORDERCOLOR "#ff0000"
#define SELBGCOLOR "#006699"
#define SELFGCOLOR "#ffffff"
+#define BARSEC "~/.dwm/daemon/get"
/* tagging */
#define TAGS \
--- dwm-4.2/draw.c Wed May 30 14:20:42 2007
+++ dwm/draw.c Sat Jun 23 14:01:02 2007
@@ -48,8 +48,9 @@
/* extern */
-void
-drawstatus(void) {
+void
+bar_fst(void) {
+
int i, x;
dc.x = dc.y = 0;
@@ -84,9 +85,80 @@
else
drawtext(NULL, dc.norm);
}
+
+ XSetForeground(dpy, dc.gc, dc.sel[ColBorder]);
+ XDrawLine(dpy, dc.drawable, dc.gc, 0, 0, sw, 0);
+ XDrawLine(dpy, dc.drawable, dc.gc, 0, dc.h-1, sw, dc.h - 1);
+
XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, sw, bh, 0, 0);
+
+}
+
+#ifdef BARSEC
+
+void
+bar_snd(void) {
+
+ int x, y, w, h;
+ unsigned int len, olen;
+ char buf[256];
+
+ dc.x = dc.y = 0;
+ XRectangle r = {dc.x, dc.y, sw, dc.h};
+
+ XSetForeground(dpy, dc.gc, dc.sel[ColBG]);
+ XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
+
+ w = 0;
+ olen = len = strlen(btext);
+ if(len >= sizeof buf)
+ len = sizeof buf - 1;
+ memcpy(buf, btext, len);
+ buf[len] = 0;
+ h = dc.font.ascent + dc.font.descent;
+ y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
+ x = (h / 2);
+ /* shorten text if necessary */
+ while(len && (w = textnw(buf, len)) > dc.w - h)
+ buf[--len] = 0;
+ if(len < olen) {
+ if(len > 1)
+ buf[len - 1] = '.';
+ if(len > 2)
+ buf[len - 2] = '.';
+ if(len > 3)
+ buf[len - 3] = '.';
+ }
+
+ XSetForeground(dpy, dc.gc, dc.sel[ColFG]);
+ if(dc.font.set)
+ XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, btext, strlen(btext));
+ else
+ XDrawString(dpy, dc.drawable, dc.gc, x, y, btext, strlen(btext));
+
+ XSetForeground(dpy, dc.gc, dc.sel[ColBorder]);
+ XDrawLine(dpy, dc.drawable, dc.gc, 0, 0, sw, 0);
+ XDrawLine(dpy, dc.drawable, dc.gc, 0, dc.h-1, sw, dc.h - 1);
+
+ XCopyArea(dpy, dc.drawable, barsec, dc.gc, 0, 0, sw, bh, 0, 0);
+
+}
+
+#endif
+
+void
+drawstatus(void) {
+
+ bar_fst();
XSync(dpy, False);
+
+#ifdef BARSEC
+ bar_snd();
+ XSync(dpy, False);
+#endif
+
}
+
void
drawtext(const char *text, unsigned long col[ColLast]) {
--- dwm-4.2/dwm.h Sat Jun 23 10:34:40 2007
+++ dwm/dwm.h Sat Jun 23 14:02:37 2007
@@ -94,6 +94,11 @@
Layout *lt;
Window root, barwin;
+#ifdef BARSEC
+ Window barsec;
+ char btext[256];
+#endif
+
#ifdef TAGLAYOUTS
Layout **taglayouts; /* global layouts array */
Layout **currenttaglayout; /* current tag layout */
--- dwm-4.2/event.c Wed May 30 14:20:42 2007
+++ dwm/event.c Sat Jun 23 14:04:18 2007
@@ -219,6 +219,9 @@
XFreePixmap(dpy, dc.drawable);
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
XResizeWindow(dpy, barwin, sw, bh);
+#ifdef BARSEC
+#endif
updatebarpos();
lt->arrange();
}
@@ -253,8 +256,14 @@
XExposeEvent *ev = &e->xexpose;
if(ev->count == 0) {
- if(barwin == ev->window)
+#ifdef BARSEC
+ if(barwin || barsec == ev->window)
drawstatus();
+#else
+ if(barwin == ev->window)
+ drawstatus();
+#endif
+
}
}
--- dwm-4.2/main.c Sat Jun 23 11:12:12 2007
+++ dwm/main.c Sat Jun 23 14:02:30 2007
@@ -15,6 +15,7 @@
/* extern */
char stext[256];
+
int screen, sx, sy, sw, sh, wax, way, waw, wah;
unsigned int bh, bpos, ntags, numlockmask;
Atom wmatom[WMLast], netatom[NetLast];
@@ -28,6 +29,11 @@
DC dc = {0};
Window root, barwin;
+#ifdef BARSEC
+ Window barsec;
+ char btext[256];
+#endif
+
#ifdef TAGLAYOUTS
Layout **taglayouts = NULL;
Layout **currenttaglayout = NULL;
@@ -55,6 +61,9 @@
XFreePixmap(dpy, dc.drawable);
XFreeGC(dpy, dc.gc);
XDestroyWindow(dpy, barwin);
+#ifdef BARSEC
+ XDestroyWindow(dpy, barsec);
+#endif
XFreeCursor(dpy, cursor[CurNormal]);
XFreeCursor(dpy, cursor[CurResize]);
XFreeCursor(dpy, cursor[CurMove]);
@@ -69,6 +78,25 @@
}
+#ifdef BARSEC
+
+static void
+updatetext() {
+
+ char _bar[256];
+
+ strcpy(btext, "");
+ FILE * proc;
+ proc = popen(BARSEC, "r");
+
+ fgets(_bar, 256, proc);
+ strncpy(btext, _bar, strlen(_bar) - 1);
+
+ pclose(proc);
+
+}
+
+#endif
+
static unsigned long
initcolor(const char *colstr) {
Colormap cmap = DefaultColormap(dpy, screen);
@@ -210,9 +238,18 @@
DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
XDefineCursor(dpy, barwin, cursor[CurNormal]);
+#ifdef BARSEC
+ barsec = XCreateWindow(dpy, root, sx, sy, sw, bh, 0,
+ DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
+ CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
+ XDefineCursor(dpy, barsec, cursor[CurNormal]);
+#endif
bpos = BARPOS;
updatebarpos();
XMapRaised(dpy, barwin);
+#ifdef BARSEC
+ XMapRaised(dpy, barsec);
+#endif
strcpy(stext, "dwm-"VERSION);
/* pixmap for everything */
dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
@@ -247,20 +284,32 @@
wax = sx;
way = sy;
- wah = sh;
waw = sw;
switch(bpos) {
default:
- wah -= bh;
+ wah = sh - bh;
way += bh;
XMoveWindow(dpy, barwin, sx, sy);
+#ifdef BARSEC
+ wah = sh - bh;
+ XMoveWindow(dpy, barsec, sx, sy + wah);
+ wah -= bh;
+#endif
break;
case BarBot:
- wah -= bh;
+ wah = sh - bh;
XMoveWindow(dpy, barwin, sx, sy + wah);
+#ifdef BARSEC
+ wah = sh - bh;
+ way += bh;
+ XMoveWindow(dpy, barsec, sx, sy);
+#endif
break;
case BarOff:
XMoveWindow(dpy, barwin, sx, sy - bh);
+#ifdef BARSEC
+ XMoveWindow(dpy, barsec, sx, sy - bh);
+#endif
break;
}
XSync(dpy, False);
@@ -316,6 +365,9 @@
XSetErrorHandler(NULL);
xerrorxlib = XSetErrorHandler(xerror);
XSync(dpy, False);
+#ifdef BARSEC
+ updatetext();
+#endif
setup();
drawstatus();
scan();
@@ -357,6 +409,9 @@
if(handler[ev.type])
(handler[ev.type])(&ev); /* call handler */
}
+#ifdef BARSEC
+ updatetext();
+#endif
}
cleanup();
XCloseDisplay(dpy);
$
$ patch -p1 < dwm2panel-4.2.patch
patching file config.h
patch: **** malformed patch at line 10: /* tagging */
Код: Выделить всё
#ifdef TAGLAYOUTS
Layout **taglayouts = NULL;
Layout **currenttaglayout = NULL;
это я заметил
[spec@baza:~]$ dwm -v
dwm-4.4.1, © 2006-2007 A. R. Garbe, S. van Dijk, J. Salmi, P. Hruby, S. Nagy
[spec@baza:~]$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
[spec@baza:~]$ cat /home/spec/distribs/System/dwm-4.4.1/config.h | grep FONT
#define FONT "-xos4-terminus-medium-*-normal-*-14-*-*-*-*-*-iso10646-1"
pento писал(а): ↑09.09.2007 12:20Проблема решена
http://www.linux.org.ru/view-message.jsp?msgid=1199673
diesel писал(а): ↑11.09.2007 10:13pento писал(а): ↑09.09.2007 12:20Проблема решена
http://www.linux.org.ru/view-message.jsp?msgid=1199673
огромное спасибо за ссылку!
Код: Выделить всё
localhost ~ # locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC=C
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
localhost ~ # cd dwm*
localhost dwm-4.6 # cat config.h | grep FONT
#define FONT "-*-verdana-medium-r-*-*-*-*-*-*-*-*-iso10646-1"
Код: Выделить всё
#define NORMBORDERCOLOR "black"
#define NORMBGCOLOR "black"
#define NORMFGCOLOR "gray"
#define SELBORDERCOLOR "black"
#define SELBGCOLOR "black"
#define SELFGCOLOR "white"
Код: Выделить всё
koshak@koshak:~/Documents/dwm-4.7$ make install clean
dwm build options:
CFLAGS = -Os -I. -I/usr/include -I/usr/X11R6/include -DVERSION="4.7"
LDFLAGS = -s -L/usr/lib -lc -L/usr/X11R6/lib -lX11
CC = cc
CC dwm.c
dwm.c:26:19: error: errno.h: No such file or directory
dwm.c:27:20: error: locale.h: No such file or directory
dwm.c:29:19: error: stdio.h: No such file or directory
dwm.c:30:20: error: stdlib.h: No such file or directory
dwm.c:31:20: error: string.h: No such file or directory
dwm.c:32:20: error: unistd.h: No such file or directory
dwm.c:33:24: error: sys/select.h: No such file or directory
dwm.c:34:23: error: sys/types.h: No such file or directory
dwm.c:35:22: error: sys/wait.h: No such file or directory
dwm.c:36:19: error: regex.h: No such file or directory
Код: Выделить всё
http://lists.suckless.org/dwm/0712/4479.html
Код: Выделить всё
static Bool resizehints = False;
но будет только хуже - окно растянется на весь экран, но место зазора все равно будет пустым (у меня так, по крайней мере).
а когда к какому-нибудь тэгу привязываешь только один терминал, то он, как положено, занимает всю площадь экрана.