diff options
Diffstat (limited to '')
| -rw-r--r-- | st.c | 60 |
1 files changed, 55 insertions, 5 deletions
| @@ -336,6 +336,7 @@ static int isfullutf8(char *, int); | |||
| 336 | static void *xmalloc(size_t); | 336 | static void *xmalloc(size_t); |
| 337 | static void *xrealloc(void *, size_t); | 337 | static void *xrealloc(void *, size_t); |
| 338 | static void *xcalloc(size_t nmemb, size_t size); | 338 | static void *xcalloc(size_t nmemb, size_t size); |
| 339 | static char *smstrcat(char *, ...); | ||
| 339 | 340 | ||
| 340 | static void (*handler[LASTEvent])(XEvent *) = { | 341 | static void (*handler[LASTEvent])(XEvent *) = { |
| 341 | [KeyPress] = kpress, | 342 | [KeyPress] = kpress, |
| @@ -393,6 +394,44 @@ xcalloc(size_t nmemb, size_t size) { | |||
| 393 | return p; | 394 | return p; |
| 394 | } | 395 | } |
| 395 | 396 | ||
| 397 | char * | ||
| 398 | smstrcat(char *src, ...) | ||
| 399 | { | ||
| 400 | va_list fmtargs; | ||
| 401 | char *ret, *p, *v; | ||
| 402 | int len, slen, flen; | ||
| 403 | |||
| 404 | len = slen = strlen(src); | ||
| 405 | |||
| 406 | va_start(fmtargs, src); | ||
| 407 | for(;;) { | ||
| 408 | v = va_arg(fmtargs, char *); | ||
| 409 | if(v == NULL) | ||
| 410 | break; | ||
| 411 | len += strlen(v); | ||
| 412 | } | ||
| 413 | va_end(fmtargs); | ||
| 414 | |||
| 415 | p = ret = xmalloc(len+1); | ||
| 416 | memmove(p, src, slen); | ||
| 417 | p += slen; | ||
| 418 | |||
| 419 | va_start(fmtargs, src); | ||
| 420 | for(;;) { | ||
| 421 | v = va_arg(fmtargs, char *); | ||
| 422 | if(v == NULL) | ||
| 423 | break; | ||
| 424 | flen = strlen(v); | ||
| 425 | memmove(p, v, flen); | ||
| 426 | p += flen; | ||
| 427 | } | ||
| 428 | va_end(fmtargs); | ||
| 429 | |||
| 430 | ret[len] = '\0'; | ||
| 431 | |||
| 432 | return ret; | ||
| 433 | } | ||
| 434 | |||
| 396 | int | 435 | int |
| 397 | utf8decode(char *s, long *u) { | 436 | utf8decode(char *s, long *u) { |
| 398 | uchar c; | 437 | uchar c; |
| @@ -2017,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) { | |||
| 2017 | } | 2056 | } |
| 2018 | 2057 | ||
| 2019 | void | 2058 | void |
| 2020 | initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) { | 2059 | initfonts(char *fontstr) { |
| 2060 | char *fstr; | ||
| 2061 | |||
| 2021 | xinitfont(&dc.font, fontstr); | 2062 | xinitfont(&dc.font, fontstr); |
| 2022 | xinitfont(&dc.bfont, bfontstr); | 2063 | |
| 2023 | xinitfont(&dc.ifont, ifontstr); | 2064 | fstr = smstrcat(fontstr, ":weight=bold", NULL); |
| 2024 | xinitfont(&dc.ibfont, ibfontstr); | 2065 | xinitfont(&dc.bfont, fstr); |
| 2066 | free(fstr); | ||
| 2067 | |||
| 2068 | fstr = smstrcat(fontstr, ":slant=italic,oblique", NULL); | ||
| 2069 | xinitfont(&dc.ifont, fstr); | ||
| 2070 | free(fstr); | ||
| 2071 | |||
| 2072 | fstr = smstrcat(fontstr, ":weight=bold:slant=italic,oblique", NULL); | ||
| 2073 | xinitfont(&dc.ibfont, fstr); | ||
| 2074 | free(fstr); | ||
| 2025 | } | 2075 | } |
| 2026 | 2076 | ||
| 2027 | void | 2077 | void |
| @@ -2037,7 +2087,7 @@ xinit(void) { | |||
| 2037 | xw.vis = XDefaultVisual(xw.dpy, xw.scr); | 2087 | xw.vis = XDefaultVisual(xw.dpy, xw.scr); |
| 2038 | 2088 | ||
| 2039 | /* font */ | 2089 | /* font */ |
| 2040 | initfonts(FONT, BOLDFONT, ITALICFONT, ITALICBOLDFONT); | 2090 | initfonts(FONT); |
| 2041 | 2091 | ||
| 2042 | /* XXX: Assuming same size for bold font */ | 2092 | /* XXX: Assuming same size for bold font */ |
| 2043 | xw.cw = dc.font.rbearing - dc.font.lbearing; | 2093 | xw.cw = dc.font.rbearing - dc.font.lbearing; |
