aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-04-20 21:42:10 -0400
committerJesse Luehrs <doy@tozt.net>2014-04-20 21:42:10 -0400
commitfa6264019f315d1e7d6cb330acd136f50261e0ab (patch)
tree67d49dc1314fafb926227414c23d6f2799f27afb
parent555797e76f787fbc04466a3281d5bafb840fe6a7 (diff)
downloadrunes-fa6264019f315d1e7d6cb330acd136f50261e0ab.tar.gz
runes-fa6264019f315d1e7d6cb330acd136f50261e0ab.zip
allow configuring the interpretation of bold
-rw-r--r--config.c33
-rw-r--r--display.c12
-rw-r--r--term.h2
3 files changed, 42 insertions, 5 deletions
diff --git a/config.c b/config.c
index 1664e4b..c266682 100644
--- a/config.c
+++ b/config.c
@@ -8,6 +8,8 @@ static void runes_config_set_defaults(RunesTerm *t);
static FILE *runes_config_get_config_file();
static void runes_config_process_config_file(RunesTerm *t, FILE *config_file);
static void runes_config_set(RunesTerm *t, char *key, char *value);
+static char runes_config_parse_bool(char *val);
+static char *runes_config_parse_string(char *val);
void runes_config_init(RunesTerm *t, int argc, char *argv[])
{
@@ -22,7 +24,9 @@ void runes_config_init(RunesTerm *t, int argc, char *argv[])
static void runes_config_set_defaults(RunesTerm *t)
{
- t->font_name = "monospace 10";
+ t->font_name = "monospace 10";
+ t->bold_is_bright = 1;
+ t->bold_is_bold = 1;
}
static FILE *runes_config_get_config_file()
@@ -112,9 +116,34 @@ static void runes_config_process_config_file(RunesTerm *t, FILE *config_file)
static void runes_config_set(RunesTerm *t, char *key, char *val)
{
if (!strcmp(key, "font")) {
- t->font_name = strdup(val);
+ t->font_name = runes_config_parse_string(val);
+ }
+ else if (!strcmp(key, "bold_is_bright")) {
+ t->bold_is_bright = runes_config_parse_bool(val);
+ }
+ else if (!strcmp(key, "bold_is_bold")) {
+ t->bold_is_bold = runes_config_parse_bool(val);
}
else {
fprintf(stderr, "unknown option: '%s'\n", key);
}
}
+
+static char runes_config_parse_bool(char *val)
+{
+ if (!strcmp(val, "true")) {
+ return 1;
+ }
+ else if (!strcmp(val, "false")) {
+ return 0;
+ }
+ else {
+ fprintf(stderr, "unknown boolean value: '%s'\n", val);
+ return 0;
+ }
+}
+
+static char *runes_config_parse_string(char *val)
+{
+ return strdup(val);
+}
diff --git a/display.c b/display.c
index 98f09d7..1a0680f 100644
--- a/display.c
+++ b/display.c
@@ -280,7 +280,10 @@ void runes_display_set_bold(RunesTerm *t)
PangoAttrList *attrs;
attrs = pango_layout_get_attributes(t->layout);
- pango_attr_list_change(attrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD));
+ if (t->bold_is_bold) {
+ pango_attr_list_change(
+ attrs, pango_attr_weight_new(PANGO_WEIGHT_BOLD));
+ }
t->bold = 1;
cairo_set_source(t->cr, runes_display_get_fgcolor(t));
}
@@ -290,7 +293,10 @@ void runes_display_reset_bold(RunesTerm *t)
PangoAttrList *attrs;
attrs = pango_layout_get_attributes(t->layout);
- pango_attr_list_change(attrs, pango_attr_weight_new(PANGO_WEIGHT_NORMAL));
+ if (t->bold_is_bold) {
+ pango_attr_list_change(
+ attrs, pango_attr_weight_new(PANGO_WEIGHT_NORMAL));
+ }
t->bold = 0;
cairo_set_source(t->cr, runes_display_get_fgcolor(t));
}
@@ -483,7 +489,7 @@ static cairo_pattern_t *runes_display_get_fgcolor(RunesTerm *t)
else if (color == -1) {
return t->inverse ? t->bgdefault : t->fgdefault;
}
- else if (t->bold) {
+ else if (t->bold_is_bright && t->bold) {
return t->brightcolors[color];
}
else {
diff --git a/term.h b/term.h
index 3938862..5dfcfc8 100644
--- a/term.h
+++ b/term.h
@@ -41,6 +41,8 @@ struct runes_term {
int readlen;
int remaininglen;
+ char bold_is_bright;
+ char bold_is_bold;
char bold;
char inverse;
char hide_cursor;