mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-23 01:40:12 -05:00
config: add colors.jump_labels and colors.urls
* colors.jump_labels configures the foreground and background colors used when rendering URL jump labels. Defaults to “regular0 regular3” (i.e. black on yellow). * colors.urls configures the color to use when highlighting URLs in URL mode. Note that we aren’t currently doing any highlighting... Defaults to regular3 (i.e. yellow).
This commit is contained in:
parent
fcbb5a0bf7
commit
e9c3d03837
5 changed files with 84 additions and 15 deletions
68
config.c
68
config.c
|
|
@ -420,6 +420,30 @@ str_to_color(const char *s, uint32_t *color, bool allow_alpha,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
str_to_two_colors(const char *s, uint32_t *first, uint32_t *second,
|
||||||
|
bool allow_alpha, struct config *conf, const char *path,
|
||||||
|
int lineno, const char *section, const char *key)
|
||||||
|
{
|
||||||
|
/* TODO: do this without strdup() */
|
||||||
|
char *value_copy = xstrdup(s);
|
||||||
|
const char *first_as_str = strtok(value_copy, " ");
|
||||||
|
const char *second_as_str = strtok(NULL, " ");
|
||||||
|
|
||||||
|
if (first_as_str == NULL || second_as_str == NULL ||
|
||||||
|
!str_to_color(first_as_str, first, allow_alpha, conf, path, lineno, section, key) ||
|
||||||
|
!str_to_color(second_as_str, second, allow_alpha, conf, path, lineno, section, key))
|
||||||
|
{
|
||||||
|
LOG_AND_NOTIFY_ERR("%s:%d: [%s]: %s: invalid colors: %s",
|
||||||
|
path, lineno, section, key, s);
|
||||||
|
free(value_copy);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(value_copy);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
str_to_pt_or_px(const char *s, struct pt_or_px *res, struct config *conf,
|
str_to_pt_or_px(const char *s, struct pt_or_px *res, struct config *conf,
|
||||||
const char *path, int lineno, const char *section, const char *key)
|
const char *path, int lineno, const char *section, const char *key)
|
||||||
|
|
@ -845,6 +869,30 @@ parse_section_colors(const char *key, const char *value, struct config *conf,
|
||||||
else if (strcmp(key, "bright7") == 0) color = &conf->colors.bright[7];
|
else if (strcmp(key, "bright7") == 0) color = &conf->colors.bright[7];
|
||||||
else if (strcmp(key, "selection-foreground") == 0) color = &conf->colors.selection_fg;
|
else if (strcmp(key, "selection-foreground") == 0) color = &conf->colors.selection_fg;
|
||||||
else if (strcmp(key, "selection-background") == 0) color = &conf->colors.selection_bg;
|
else if (strcmp(key, "selection-background") == 0) color = &conf->colors.selection_bg;
|
||||||
|
|
||||||
|
else if (strcmp(key, "jump-labels") == 0) {
|
||||||
|
if (!str_to_two_colors(
|
||||||
|
value, &conf->colors.jump_label.fg, &conf->colors.jump_label.bg,
|
||||||
|
false, conf, path, lineno, "colors", "jump-labels"))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
conf->colors.use_custom.jump_label = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (strcmp(key, "urls") == 0) {
|
||||||
|
if (!str_to_color(value, &conf->colors.url, false,
|
||||||
|
conf, path, lineno, "colors", "urls"))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
conf->colors.use_custom.url = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
else if (strcmp(key, "alpha") == 0) {
|
else if (strcmp(key, "alpha") == 0) {
|
||||||
double alpha;
|
double alpha;
|
||||||
if (!str_to_double(value, &alpha) || alpha < 0. || alpha > 1.) {
|
if (!str_to_double(value, &alpha) || alpha < 0. || alpha > 1.) {
|
||||||
|
|
@ -892,23 +940,15 @@ parse_section_cursor(const char *key, const char *value, struct config *conf,
|
||||||
conf->cursor.blink = str_to_bool(value);
|
conf->cursor.blink = str_to_bool(value);
|
||||||
|
|
||||||
else if (strcmp(key, "color") == 0) {
|
else if (strcmp(key, "color") == 0) {
|
||||||
char *value_copy = xstrdup(value);
|
if (!str_to_two_colors(
|
||||||
const char *text = strtok(value_copy, " ");
|
value, &conf->cursor.color.text, &conf->cursor.color.cursor,
|
||||||
const char *cursor = strtok(NULL, " ");
|
false, conf, path, lineno, "cursor", "color"))
|
||||||
|
|
||||||
uint32_t text_color, cursor_color;
|
|
||||||
if (text == NULL || cursor == NULL ||
|
|
||||||
!str_to_color(text, &text_color, false, conf, path, lineno, "cursor", "color") ||
|
|
||||||
!str_to_color(cursor, &cursor_color, false, conf, path, lineno, "cursor", "color"))
|
|
||||||
{
|
{
|
||||||
LOG_AND_NOTIFY_ERR("%s:%d: invalid cursor colors: %s", path, lineno, value);
|
|
||||||
free(value_copy);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
conf->cursor.color.text = 1u << 31 | text_color;
|
conf->cursor.color.text |= 1u << 31;
|
||||||
conf->cursor.color.cursor = 1u << 31 | cursor_color;
|
conf->cursor.color.cursor |= 1u << 31;
|
||||||
free(value_copy);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
|
@ -2283,6 +2323,8 @@ config_load(struct config *conf, const char *conf_path,
|
||||||
.selection_bg = 0x80000000, /* Use default fg */
|
.selection_bg = 0x80000000, /* Use default fg */
|
||||||
.use_custom = {
|
.use_custom = {
|
||||||
.selection = false,
|
.selection = false,
|
||||||
|
.jump_label = false,
|
||||||
|
.url = false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
8
config.h
8
config.h
|
|
@ -139,9 +139,17 @@ struct config {
|
||||||
uint16_t alpha;
|
uint16_t alpha;
|
||||||
uint32_t selection_fg;
|
uint32_t selection_fg;
|
||||||
uint32_t selection_bg;
|
uint32_t selection_bg;
|
||||||
|
uint32_t url;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
uint32_t fg;
|
||||||
|
uint32_t bg;
|
||||||
|
} jump_label;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
bool selection:1;
|
bool selection:1;
|
||||||
|
bool jump_label:1;
|
||||||
|
bool url:1;
|
||||||
} use_custom;
|
} use_custom;
|
||||||
} colors;
|
} colors;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -351,6 +351,15 @@ _alpha_ option.
|
||||||
text. Note that *both* options must be set, or the default will be
|
text. Note that *both* options must be set, or the default will be
|
||||||
used. Default: _inverse foreground/background_.
|
used. Default: _inverse foreground/background_.
|
||||||
|
|
||||||
|
*jump-labels*
|
||||||
|
To RRGGBB values specifying the foreground (text) and background
|
||||||
|
colors to use when rendering jump labels in URL mode. Default:
|
||||||
|
_regular0 regular3_.
|
||||||
|
|
||||||
|
*urls*
|
||||||
|
Color to use for the underline used to highlight URLs in URL
|
||||||
|
mode. Default: _regular3_.
|
||||||
|
|
||||||
|
|
||||||
# SECTION: csd
|
# SECTION: csd
|
||||||
|
|
||||||
|
|
|
||||||
2
foot.ini
2
foot.ini
|
|
@ -66,6 +66,8 @@
|
||||||
# bright7=ffffff # bright white
|
# bright7=ffffff # bright white
|
||||||
# selection-foreground=<inverse foreground/background>
|
# selection-foreground=<inverse foreground/background>
|
||||||
# selection-background=<inverse foreground/background>
|
# selection-background=<inverse foreground/background>
|
||||||
|
# jump-labels=<regular0> <regular3>
|
||||||
|
# urls=<regular3>
|
||||||
|
|
||||||
[csd]
|
[csd]
|
||||||
# preferred=server
|
# preferred=server
|
||||||
|
|
|
||||||
12
render.c
12
render.c
|
|
@ -2578,9 +2578,17 @@ render_urls(struct terminal *term)
|
||||||
(term->margins.left + x) / term->scale,
|
(term->margins.left + x) / term->scale,
|
||||||
(term->margins.top + y) / term->scale);
|
(term->margins.top + y) / term->scale);
|
||||||
|
|
||||||
|
uint32_t fg = term->conf->colors.use_custom.jump_label
|
||||||
|
? term->conf->colors.jump_label.fg
|
||||||
|
: term->colors.table[0];
|
||||||
|
uint32_t bg = term->conf->colors.use_custom.jump_label
|
||||||
|
? term->conf->colors.jump_label.bg
|
||||||
|
: term->colors.table[3];
|
||||||
|
|
||||||
|
uint16_t alpha = 0xffff;
|
||||||
|
|
||||||
render_osd(term, surf, sub_surf, buf, label,
|
render_osd(term, surf, sub_surf, buf, label,
|
||||||
term->colors.table[0], term->colors.table[3], 0xf000,
|
fg, bg, alpha, width, height, margin, margin);
|
||||||
width, height, margin, margin);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue