|
@ -336,6 +336,7 @@ static int isfullutf8(char *, int); |
|
|
static void *xmalloc(size_t); |
|
|
static void *xmalloc(size_t); |
|
|
static void *xrealloc(void *, size_t); |
|
|
static void *xrealloc(void *, size_t); |
|
|
static void *xcalloc(size_t nmemb, size_t size); |
|
|
static void *xcalloc(size_t nmemb, size_t size); |
|
|
|
|
|
static char *smstrcat(char *, ...); |
|
|
|
|
|
|
|
|
static void (*handler[LASTEvent])(XEvent *) = { |
|
|
static void (*handler[LASTEvent])(XEvent *) = { |
|
|
[KeyPress] = kpress, |
|
|
[KeyPress] = kpress, |
|
@ -393,6 +394,44 @@ xcalloc(size_t nmemb, size_t size) { |
|
|
return p; |
|
|
return p; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
char * |
|
|
|
|
|
smstrcat(char *src, ...) |
|
|
|
|
|
{ |
|
|
|
|
|
va_list fmtargs; |
|
|
|
|
|
char *ret, *p, *v; |
|
|
|
|
|
int len, slen, flen; |
|
|
|
|
|
|
|
|
|
|
|
len = slen = strlen(src); |
|
|
|
|
|
|
|
|
|
|
|
va_start(fmtargs, src); |
|
|
|
|
|
for(;;) { |
|
|
|
|
|
v = va_arg(fmtargs, char *); |
|
|
|
|
|
if(v == NULL) |
|
|
|
|
|
break; |
|
|
|
|
|
len += strlen(v); |
|
|
|
|
|
} |
|
|
|
|
|
va_end(fmtargs); |
|
|
|
|
|
|
|
|
|
|
|
p = ret = xmalloc(len+1); |
|
|
|
|
|
memmove(p, src, slen); |
|
|
|
|
|
p += slen; |
|
|
|
|
|
|
|
|
|
|
|
va_start(fmtargs, src); |
|
|
|
|
|
for(;;) { |
|
|
|
|
|
v = va_arg(fmtargs, char *); |
|
|
|
|
|
if(v == NULL) |
|
|
|
|
|
break; |
|
|
|
|
|
flen = strlen(v); |
|
|
|
|
|
memmove(p, v, flen); |
|
|
|
|
|
p += flen; |
|
|
|
|
|
} |
|
|
|
|
|
va_end(fmtargs); |
|
|
|
|
|
|
|
|
|
|
|
ret[len] = '\0'; |
|
|
|
|
|
|
|
|
|
|
|
return ret; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
int |
|
|
int |
|
|
utf8decode(char *s, long *u) { |
|
|
utf8decode(char *s, long *u) { |
|
|
uchar c; |
|
|
uchar c; |
|
@ -2017,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void |
|
|
void |
|
|
initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) { |
|
|
|
|
|
|
|
|
initfonts(char *fontstr) { |
|
|
|
|
|
char *fstr; |
|
|
|
|
|
|
|
|
xinitfont(&dc.font, fontstr); |
|
|
xinitfont(&dc.font, fontstr); |
|
|
xinitfont(&dc.bfont, bfontstr); |
|
|
|
|
|
xinitfont(&dc.ifont, ifontstr); |
|
|
|
|
|
xinitfont(&dc.ibfont, ibfontstr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fstr = smstrcat(fontstr, ":weight=bold", NULL); |
|
|
|
|
|
xinitfont(&dc.bfont, fstr); |
|
|
|
|
|
free(fstr); |
|
|
|
|
|
|
|
|
|
|
|
fstr = smstrcat(fontstr, ":slant=italic,oblique", NULL); |
|
|
|
|
|
xinitfont(&dc.ifont, fstr); |
|
|
|
|
|
free(fstr); |
|
|
|
|
|
|
|
|
|
|
|
fstr = smstrcat(fontstr, ":weight=bold:slant=italic,oblique", NULL); |
|
|
|
|
|
xinitfont(&dc.ibfont, fstr); |
|
|
|
|
|
free(fstr); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void |
|
|
void |
|
@ -2037,7 +2087,7 @@ xinit(void) { |
|
|
xw.vis = XDefaultVisual(xw.dpy, xw.scr); |
|
|
xw.vis = XDefaultVisual(xw.dpy, xw.scr); |
|
|
|
|
|
|
|
|
/* font */ |
|
|
/* font */ |
|
|
initfonts(FONT, BOLDFONT, ITALICFONT, ITALICBOLDFONT); |
|
|
|
|
|
|
|
|
initfonts(FONT); |
|
|
|
|
|
|
|
|
/* XXX: Assuming same size for bold font */ |
|
|
/* XXX: Assuming same size for bold font */ |
|
|
xw.cw = dc.font.rbearing - dc.font.lbearing; |
|
|
xw.cw = dc.font.rbearing - dc.font.lbearing; |
|
|