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:
Ingo Bürk 2015-05-31 16:07:23 +02:00
parent 8029ff09d7
commit 9b691bcca2
9 changed files with 40 additions and 1 deletions

View File

@ -40,6 +40,9 @@ struct xcb_color_strings_t {
char *urgent_ws_bg; char *urgent_ws_bg;
char *urgent_ws_fg; char *urgent_ws_fg;
char *urgent_ws_border; char *urgent_ws_border;
char *binding_mode_bg;
char *binding_mode_fg;
char *binding_mode_border;
}; };
typedef struct xcb_colors_t xcb_colors_t; typedef struct xcb_colors_t xcb_colors_t;

View File

@ -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_border, urgent_ws_border);
COLOR(urgent_workspace_bg, urgent_ws_bg); COLOR(urgent_workspace_bg, urgent_ws_bg);
COLOR(urgent_workspace_text, urgent_ws_fg); 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); 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_fg);
FREE_COLOR(focus_ws_bg); FREE_COLOR(focus_ws_bg);
FREE_COLOR(focus_ws_border); FREE_COLOR(focus_ws_border);
FREE_COLOR(binding_mode_fg);
FREE_COLOR(binding_mode_bg);
FREE_COLOR(binding_mode_border);
#undef FREE_COLOR #undef FREE_COLOR
} }

View File

@ -106,6 +106,9 @@ struct xcb_colors_t {
uint32_t focus_ws_bg; uint32_t focus_ws_bg;
uint32_t focus_ws_fg; uint32_t focus_ws_fg;
uint32_t focus_ws_border; 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; 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"); PARSE_COLOR(focus_ws_border, "#4c7899");
#undef PARSE_COLOR #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(); init_tray_colors();
xcb_flush(xcb_connection); xcb_flush(xcb_connection);
} }

View File

@ -344,6 +344,10 @@ struct Barconfig {
char *urgent_workspace_border; char *urgent_workspace_border;
char *urgent_workspace_bg; char *urgent_workspace_bg;
char *urgent_workspace_text; char *urgent_workspace_text;
char *binding_mode_border;
char *binding_mode_bg;
char *binding_mode_text;
} colors; } colors;
TAILQ_ENTRY(Barconfig) configs; TAILQ_ENTRY(Barconfig) configs;

View File

@ -511,7 +511,7 @@ state BAR_COLORS:
'set' -> BAR_COLORS_IGNORE_LINE 'set' -> BAR_COLORS_IGNORE_LINE
colorclass = 'background', 'statusline', 'separator' colorclass = 'background', 'statusline', 'separator'
-> BAR_COLORS_SINGLE -> 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_COLORS_BORDER
'}' '}'
-> BAR -> BAR

View File

@ -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_border);
FREE(barconfig->colors.urgent_workspace_bg); FREE(barconfig->colors.urgent_workspace_bg);
FREE(barconfig->colors.urgent_workspace_text); 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); TAILQ_REMOVE(&barconfigs, barconfig, configs);
FREE(barconfig); FREE(barconfig);
} }

View File

@ -570,6 +570,7 @@ CFGFUN(bar_color, const char *colorclass, const char *border, const char *backgr
APPLY_COLORS(active_workspace); APPLY_COLORS(active_workspace);
APPLY_COLORS(inactive_workspace); APPLY_COLORS(inactive_workspace);
APPLY_COLORS(urgent_workspace); APPLY_COLORS(urgent_workspace);
APPLY_COLORS(binding_mode);
#undef APPLY_COLORS #undef APPLY_COLORS
} }

View File

@ -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_border);
YSTR_IF_SET(urgent_workspace_bg); YSTR_IF_SET(urgent_workspace_bg);
YSTR_IF_SET(urgent_workspace_text); 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);
y(map_close); y(map_close);

View File

@ -112,6 +112,7 @@ bar {
active_workspace #333333 #222222 #888888 active_workspace #333333 #222222 #888888
inactive_workspace #333333 #222222 #888888 inactive_workspace #333333 #222222 #888888
urgent_workspace #2f343a #900000 #ffffff urgent_workspace #2f343a #900000 #ffffff
binding_mode #abc123 #123abc #ababab
} }
} }
EOT EOT
@ -151,6 +152,9 @@ is_deeply($bar_config->{colors},
urgent_workspace_border => '#2f343a', urgent_workspace_border => '#2f343a',
urgent_workspace_text => '#ffffff', urgent_workspace_text => '#ffffff',
urgent_workspace_bg => '#900000', urgent_workspace_bg => '#900000',
binding_mode_border => '#abc123',
binding_mode_text => '#ababab',
binding_mode_bg => '#123abc',
}, 'colors ok'); }, 'colors ok');
exit_gracefully($pid); exit_gracefully($pid);