aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Lohmann <20h@r-36.net>2012-09-30 20:10:58 +0200
committerChristoph Lohmann <20h@r-36.net>2012-09-30 20:10:58 +0200
commit4497d2125c74aef132d0a70128285d6726dce194 (patch)
tree101de87791d9b28f3ab37fcb0a756bf4305441c1
parente49660213594faa5a79d71087bcf4ac80be22c47 (diff)
downloadst-patched-4497d2125c74aef132d0a70128285d6726dce194.tar.bz2
st-patched-4497d2125c74aef132d0a70128285d6726dce194.tar.xz
st-patched-4497d2125c74aef132d0a70128285d6726dce194.zip
Remove the cruft of the user to have to define the different font styles.
-rw-r--r--st.c60
1 files changed, 55 insertions, 5 deletions
diff --git a/st.c b/st.c
index 5ed3753..710cf34 100644
--- a/st.c
+++ b/st.c
@@ -336,6 +336,7 @@ static int isfullutf8(char *, int);
336static void *xmalloc(size_t); 336static void *xmalloc(size_t);
337static void *xrealloc(void *, size_t); 337static void *xrealloc(void *, size_t);
338static void *xcalloc(size_t nmemb, size_t size); 338static void *xcalloc(size_t nmemb, size_t size);
339static char *smstrcat(char *, ...);
339 340
340static void (*handler[LASTEvent])(XEvent *) = { 341static 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
397char *
398smstrcat(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
396int 435int
397utf8decode(char *s, long *u) { 436utf8decode(char *s, long *u) {
398 uchar c; 437 uchar c;
@@ -2017,11 +2056,22 @@ xinitfont(Font *f, char *fontstr) {
2017} 2056}
2018 2057
2019void 2058void
2020initfonts(char *fontstr, char *bfontstr, char *ifontstr, char *ibfontstr) { 2059initfonts(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
2027void 2077void
@@ -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;