Merge branch 'custom-selection-colors' into master

This commit is contained in:
Daniel Eklöf 2020-08-13 06:22:45 +02:00
commit 52abf85266
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
6 changed files with 33 additions and 8 deletions

View file

@ -28,6 +28,8 @@
* **mouse.hide-when-typing** option to `footrc`.
* **scrollback.multiplier** option to `footrc`
(https://codeberg.org/dnkl/foot/issues/54).
* **colors.selection-foreground** and **colors.selection-background**
options to `footrc`.
### Deprecated

View file

@ -474,6 +474,8 @@ parse_section_colors(const char *key, const char *value, struct config *conf,
else if (strcmp(key, "bright5") == 0) color = &conf->colors.bright[5];
else if (strcmp(key, "bright6") == 0) color = &conf->colors.bright[6];
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-background") == 0) color = &conf->colors.selection_bg;
else if (strcmp(key, "alpha") == 0) {
double alpha;
if (!str_to_double(value, &alpha) || alpha < 0. || alpha > 1.) {
@ -1257,6 +1259,9 @@ config_load(struct config *conf, const char *conf_path, bool errors_are_fatal)
default_bright[7],
},
.alpha = 0xffff,
.selection_fg = 0x80000000, /* Use default bg */
.selection_bg = 0x80000000, /* Use default fg */
.selection_uses_custom_colors = false,
},
.cursor = {
@ -1373,6 +1378,10 @@ config_load(struct config *conf, const char *conf_path, bool errors_are_fatal)
ret = parse_config_file(f, conf, conf_path, errors_are_fatal);
fclose(f);
conf->colors.selection_uses_custom_colors =
conf->colors.selection_fg >> 24 == 0 &&
conf->colors.selection_bg >> 24 == 0;
out:
if (ret && tll_length(conf->fonts) == 0)
tll_push_back(conf->fonts, config_font_parse("monospace"));

View file

@ -70,6 +70,9 @@ struct config {
uint32_t regular[8];
uint32_t bright[8];
uint16_t alpha;
uint32_t selection_fg;
uint32_t selection_bg;
bool selection_uses_custom_colors;
} colors;
struct {

View file

@ -156,6 +156,11 @@ _alpha_ option.
Background translucency. A value in the range 0.0-1.0, where 0.0
means completely transparent, and 1.0 is opaque. Default: _1.0_.
*selection-foreground*, *selection-background*
Foreground (text) and background color to use in selected
text. Note that *both* options must be set, or the default will be
used. Default: _inverse foreground/background_.
# SECTION: csd

2
footrc
View file

@ -43,6 +43,8 @@
# bright5=fcace3 # bright magenta
# bright6=b3ffff # bright cyan
# bright7=ffffff # bright white
# selection-foreground=<inverse foreground/background>
# selection-background=<inverse foreground/background>
[csd]
# preferred=server

View file

@ -384,15 +384,19 @@ render_cell(struct terminal *term, pixman_image_t *pix,
uint32_t _fg = 0;
uint32_t _bg = 0;
/* Use cell specific color, if set, otherwise the default colors (possible reversed) */
_fg = cell->attrs.have_fg ? cell->attrs.fg : term->colors.fg;
_bg = cell->attrs.have_bg ? cell->attrs.bg : term->colors.bg;
if (is_selected && term->conf->colors.selection_uses_custom_colors) {
_fg = term->conf->colors.selection_fg;
_bg = term->conf->colors.selection_bg;
} else {
/* Use cell specific color, if set, otherwise the default colors (possible reversed) */
_fg = cell->attrs.have_fg ? cell->attrs.fg : term->colors.fg;
_bg = cell->attrs.have_bg ? cell->attrs.bg : term->colors.bg;
/* If *one* is set, we reverse */
if (term->reverse ^ cell->attrs.reverse ^ is_selected) {
uint32_t swap = _fg;
_fg = _bg;
_bg = swap;
if (term->reverse ^ cell->attrs.reverse ^ is_selected) {
uint32_t swap = _fg;
_fg = _bg;
_bg = swap;
}
}
if (cell->attrs.blink && term->blink.state == BLINK_OFF)