Introduce a config directive 'binding_mode' in the 'bar' config, pass it through the IPC and parse it in i3bar.
This commit is contained in:
parent
8029ff09d7
commit
9b691bcca2
@ -40,6 +40,9 @@ struct xcb_color_strings_t {
|
||||
char *urgent_ws_bg;
|
||||
char *urgent_ws_fg;
|
||||
char *urgent_ws_border;
|
||||
char *binding_mode_bg;
|
||||
char *binding_mode_fg;
|
||||
char *binding_mode_border;
|
||||
};
|
||||
|
||||
typedef struct xcb_colors_t xcb_colors_t;
|
||||
|
@ -191,6 +191,9 @@ static int config_string_cb(void *params_, const unsigned char *val, size_t _len
|
||||
COLOR(urgent_workspace_border, urgent_ws_border);
|
||||
COLOR(urgent_workspace_bg, urgent_ws_bg);
|
||||
COLOR(urgent_workspace_text, urgent_ws_fg);
|
||||
COLOR(binding_mode_border, binding_mode_border);
|
||||
COLOR(binding_mode_bg, binding_mode_bg);
|
||||
COLOR(binding_mode_text, binding_mode_fg);
|
||||
|
||||
printf("got unexpected string %.*s for cur_key = %s\n", len, val, cur_key);
|
||||
|
||||
@ -286,5 +289,8 @@ void free_colors(struct xcb_color_strings_t *colors) {
|
||||
FREE_COLOR(focus_ws_fg);
|
||||
FREE_COLOR(focus_ws_bg);
|
||||
FREE_COLOR(focus_ws_border);
|
||||
FREE_COLOR(binding_mode_fg);
|
||||
FREE_COLOR(binding_mode_bg);
|
||||
FREE_COLOR(binding_mode_border);
|
||||
#undef FREE_COLOR
|
||||
}
|
||||
|
@ -106,6 +106,9 @@ struct xcb_colors_t {
|
||||
uint32_t focus_ws_bg;
|
||||
uint32_t focus_ws_fg;
|
||||
uint32_t focus_ws_border;
|
||||
uint32_t binding_mode_bg;
|
||||
uint32_t binding_mode_fg;
|
||||
uint32_t binding_mode_border;
|
||||
};
|
||||
struct xcb_colors_t colors;
|
||||
|
||||
@ -374,6 +377,18 @@ void init_colors(const struct xcb_color_strings_t *new_colors) {
|
||||
PARSE_COLOR(focus_ws_border, "#4c7899");
|
||||
#undef PARSE_COLOR
|
||||
|
||||
#define PARSE_COLOR_FALLBACK(name, fallback) \
|
||||
do { \
|
||||
colors.name = new_colors->name ? get_colorpixel(new_colors->name) : colors.fallback; \
|
||||
} while (0)
|
||||
|
||||
/* For the binding mode indicator colors, we don't hardcode a default.
|
||||
* Instead, we fall back to urgent_ws_* colors. */
|
||||
PARSE_COLOR_FALLBACK(binding_mode_fg, urgent_ws_fg);
|
||||
PARSE_COLOR_FALLBACK(binding_mode_bg, urgent_ws_bg);
|
||||
PARSE_COLOR_FALLBACK(binding_mode_border, urgent_ws_border);
|
||||
#undef PARSE_COLOR_FALLBACK
|
||||
|
||||
init_tray_colors();
|
||||
xcb_flush(xcb_connection);
|
||||
}
|
||||
|
@ -344,6 +344,10 @@ struct Barconfig {
|
||||
char *urgent_workspace_border;
|
||||
char *urgent_workspace_bg;
|
||||
char *urgent_workspace_text;
|
||||
|
||||
char *binding_mode_border;
|
||||
char *binding_mode_bg;
|
||||
char *binding_mode_text;
|
||||
} colors;
|
||||
|
||||
TAILQ_ENTRY(Barconfig) configs;
|
||||
|
@ -511,7 +511,7 @@ state BAR_COLORS:
|
||||
'set' -> BAR_COLORS_IGNORE_LINE
|
||||
colorclass = 'background', 'statusline', 'separator'
|
||||
-> BAR_COLORS_SINGLE
|
||||
colorclass = 'focused_workspace', 'active_workspace', 'inactive_workspace', 'urgent_workspace'
|
||||
colorclass = 'focused_workspace', 'active_workspace', 'inactive_workspace', 'urgent_workspace', 'binding_mode'
|
||||
-> BAR_COLORS_BORDER
|
||||
'}'
|
||||
-> BAR
|
||||
|
@ -130,6 +130,9 @@ void load_configuration(xcb_connection_t *conn, const char *override_configpath,
|
||||
FREE(barconfig->colors.urgent_workspace_border);
|
||||
FREE(barconfig->colors.urgent_workspace_bg);
|
||||
FREE(barconfig->colors.urgent_workspace_text);
|
||||
FREE(barconfig->colors.binding_mode_border);
|
||||
FREE(barconfig->colors.binding_mode_bg);
|
||||
FREE(barconfig->colors.binding_mode_text);
|
||||
TAILQ_REMOVE(&barconfigs, barconfig, configs);
|
||||
FREE(barconfig);
|
||||
}
|
||||
|
@ -570,6 +570,7 @@ CFGFUN(bar_color, const char *colorclass, const char *border, const char *backgr
|
||||
APPLY_COLORS(active_workspace);
|
||||
APPLY_COLORS(inactive_workspace);
|
||||
APPLY_COLORS(urgent_workspace);
|
||||
APPLY_COLORS(binding_mode);
|
||||
|
||||
#undef APPLY_COLORS
|
||||
}
|
||||
|
@ -611,6 +611,9 @@ static void dump_bar_config(yajl_gen gen, Barconfig *config) {
|
||||
YSTR_IF_SET(urgent_workspace_border);
|
||||
YSTR_IF_SET(urgent_workspace_bg);
|
||||
YSTR_IF_SET(urgent_workspace_text);
|
||||
YSTR_IF_SET(binding_mode_border);
|
||||
YSTR_IF_SET(binding_mode_bg);
|
||||
YSTR_IF_SET(binding_mode_text);
|
||||
y(map_close);
|
||||
|
||||
y(map_close);
|
||||
|
@ -112,6 +112,7 @@ bar {
|
||||
active_workspace #333333 #222222 #888888
|
||||
inactive_workspace #333333 #222222 #888888
|
||||
urgent_workspace #2f343a #900000 #ffffff
|
||||
binding_mode #abc123 #123abc #ababab
|
||||
}
|
||||
}
|
||||
EOT
|
||||
@ -151,6 +152,9 @@ is_deeply($bar_config->{colors},
|
||||
urgent_workspace_border => '#2f343a',
|
||||
urgent_workspace_text => '#ffffff',
|
||||
urgent_workspace_bg => '#900000',
|
||||
binding_mode_border => '#abc123',
|
||||
binding_mode_text => '#ababab',
|
||||
binding_mode_bg => '#123abc',
|
||||
}, 'colors ok');
|
||||
|
||||
exit_gracefully($pid);
|
||||
|
Loading…
Reference in New Issue
Block a user