diff options
author | emersion <contact@emersion.fr> | 2018-11-19 17:56:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-19 17:56:18 +0100 |
commit | bf7af9c690de1da94a5fa258747cd983cb61b707 (patch) | |
tree | 1b731331f1ea6ebb430a9bf4dbc1db482bc7ff5d /swaybar | |
parent | Merge pull request #3152 from camoz/master (diff) | |
parent | Implement strip_workspace_name. (diff) | |
download | sway-bf7af9c690de1da94a5fa258747cd983cb61b707.tar.gz sway-bf7af9c690de1da94a5fa258747cd983cb61b707.tar.zst sway-bf7af9c690de1da94a5fa258747cd983cb61b707.zip |
Merge pull request #3083 from c-edw/feature/StripWorkspaceName
Implement strip_workspace_name.
Diffstat (limited to 'swaybar')
-rw-r--r-- | swaybar/bar.c | 1 | ||||
-rw-r--r-- | swaybar/config.c | 1 | ||||
-rw-r--r-- | swaybar/ipc.c | 29 | ||||
-rw-r--r-- | swaybar/render.c | 22 |
4 files changed, 30 insertions, 23 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c index 08c386a7..2178f542 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c | |||
@@ -31,6 +31,7 @@ void free_workspaces(struct wl_list *list) { | |||
31 | wl_list_for_each_safe(ws, tmp, list, link) { | 31 | wl_list_for_each_safe(ws, tmp, list, link) { |
32 | wl_list_remove(&ws->link); | 32 | wl_list_remove(&ws->link); |
33 | free(ws->name); | 33 | free(ws->name); |
34 | free(ws->label); | ||
34 | free(ws); | 35 | free(ws); |
35 | } | 36 | } |
36 | } | 37 | } |
diff --git a/swaybar/config.c b/swaybar/config.c index 0fd1f02e..0ab346b1 100644 --- a/swaybar/config.c +++ b/swaybar/config.c | |||
@@ -30,6 +30,7 @@ struct swaybar_config *init_config(void) { | |||
30 | config->hidden_state = strdup("hide"); | 30 | config->hidden_state = strdup("hide"); |
31 | config->sep_symbol = NULL; | 31 | config->sep_symbol = NULL; |
32 | config->strip_workspace_numbers = false; | 32 | config->strip_workspace_numbers = false; |
33 | config->strip_workspace_name = false; | ||
33 | config->binding_mode_indicator = true; | 34 | config->binding_mode_indicator = true; |
34 | config->wrap_scroll = false; | 35 | config->wrap_scroll = false; |
35 | config->workspace_buttons = true; | 36 | config->workspace_buttons = true; |
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 706f968d..db4360c1 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -153,9 +153,10 @@ static bool ipc_parse_config( | |||
153 | return false; | 153 | return false; |
154 | } | 154 | } |
155 | json_object *markup, *mode, *hidden_state, *position, *status_command; | 155 | json_object *markup, *mode, *hidden_state, *position, *status_command; |
156 | json_object *font, *bar_height, *wrap_scroll, *workspace_buttons, *strip_workspace_numbers; | 156 | json_object *font, *bar_height, *wrap_scroll, *workspace_buttons; |
157 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol, *outputs; | 157 | json_object *strip_workspace_numbers, *strip_workspace_name; |
158 | json_object *bindings; | 158 | json_object *binding_mode_indicator, *verbose, *colors, *sep_symbol; |
159 | json_object *outputs, *bindings; | ||
159 | json_object_object_get_ex(bar_config, "mode", &mode); | 160 | json_object_object_get_ex(bar_config, "mode", &mode); |
160 | json_object_object_get_ex(bar_config, "hidden_state", &hidden_state); | 161 | json_object_object_get_ex(bar_config, "hidden_state", &hidden_state); |
161 | json_object_object_get_ex(bar_config, "position", &position); | 162 | json_object_object_get_ex(bar_config, "position", &position); |
@@ -165,6 +166,7 @@ static bool ipc_parse_config( | |||
165 | json_object_object_get_ex(bar_config, "wrap_scroll", &wrap_scroll); | 166 | json_object_object_get_ex(bar_config, "wrap_scroll", &wrap_scroll); |
166 | json_object_object_get_ex(bar_config, "workspace_buttons", &workspace_buttons); | 167 | json_object_object_get_ex(bar_config, "workspace_buttons", &workspace_buttons); |
167 | json_object_object_get_ex(bar_config, "strip_workspace_numbers", &strip_workspace_numbers); | 168 | json_object_object_get_ex(bar_config, "strip_workspace_numbers", &strip_workspace_numbers); |
169 | json_object_object_get_ex(bar_config, "strip_workspace_name", &strip_workspace_name); | ||
168 | json_object_object_get_ex(bar_config, "binding_mode_indicator", &binding_mode_indicator); | 170 | json_object_object_get_ex(bar_config, "binding_mode_indicator", &binding_mode_indicator); |
169 | json_object_object_get_ex(bar_config, "verbose", &verbose); | 171 | json_object_object_get_ex(bar_config, "verbose", &verbose); |
170 | json_object_object_get_ex(bar_config, "separator_symbol", &sep_symbol); | 172 | json_object_object_get_ex(bar_config, "separator_symbol", &sep_symbol); |
@@ -190,6 +192,9 @@ static bool ipc_parse_config( | |||
190 | if (strip_workspace_numbers) { | 192 | if (strip_workspace_numbers) { |
191 | config->strip_workspace_numbers = json_object_get_boolean(strip_workspace_numbers); | 193 | config->strip_workspace_numbers = json_object_get_boolean(strip_workspace_numbers); |
192 | } | 194 | } |
195 | if (strip_workspace_name) { | ||
196 | config->strip_workspace_name = json_object_get_boolean(strip_workspace_name); | ||
197 | } | ||
193 | if (binding_mode_indicator) { | 198 | if (binding_mode_indicator) { |
194 | config->binding_mode_indicator = json_object_get_boolean(binding_mode_indicator); | 199 | config->binding_mode_indicator = json_object_get_boolean(binding_mode_indicator); |
195 | } | 200 | } |
@@ -298,6 +303,24 @@ bool ipc_get_workspaces(struct swaybar *bar) { | |||
298 | calloc(1, sizeof(struct swaybar_workspace)); | 303 | calloc(1, sizeof(struct swaybar_workspace)); |
299 | ws->num = json_object_get_int(num); | 304 | ws->num = json_object_get_int(num); |
300 | ws->name = strdup(json_object_get_string(name)); | 305 | ws->name = strdup(json_object_get_string(name)); |
306 | ws->label = strdup(ws->name); | ||
307 | // ws->num will be -1 if workspace name doesn't begin with int. | ||
308 | if (ws->num != -1) { | ||
309 | size_t len_offset = numlen(ws->num); | ||
310 | if (bar->config->strip_workspace_name) { | ||
311 | free(ws->label); | ||
312 | ws->label = malloc(len_offset + 1 * sizeof(char)); | ||
313 | ws->label[len_offset] = '\0'; | ||
314 | strncpy(ws->label, ws->name, len_offset); | ||
315 | } else if (bar->config->strip_workspace_numbers) { | ||
316 | len_offset += ws->label[len_offset] == ':'; | ||
317 | if (strlen(ws->name) > len_offset) { | ||
318 | free(ws->label); | ||
319 | // Strip number prefix [1-?:] using len_offset. | ||
320 | ws->label = strdup(ws->name + len_offset); | ||
321 | } | ||
322 | } | ||
323 | } | ||
301 | ws->visible = json_object_get_boolean(visible); | 324 | ws->visible = json_object_get_boolean(visible); |
302 | ws->focused = json_object_get_boolean(focused); | 325 | ws->focused = json_object_get_boolean(focused); |
303 | if (ws->focused) { | 326 | if (ws->focused) { |
diff --git a/swaybar/render.c b/swaybar/render.c index 4ebf922e..8269a840 100644 --- a/swaybar/render.c +++ b/swaybar/render.c | |||
@@ -342,19 +342,6 @@ static uint32_t render_binding_mode_indicator(cairo_t *cairo, | |||
342 | return output->height; | 342 | return output->height; |
343 | } | 343 | } |
344 | 344 | ||
345 | static const char *strip_workspace_number(const char *ws_name) { | ||
346 | size_t len = strlen(ws_name); | ||
347 | for (size_t i = 0; i < len; ++i) { | ||
348 | if (ws_name[i] < '0' || ws_name[i] > '9') { | ||
349 | if (':' == ws_name[i] && i < len - 1 && i > 0) { | ||
350 | return ws_name + i + 1; | ||
351 | } | ||
352 | return ws_name; | ||
353 | } | ||
354 | } | ||
355 | return ws_name; | ||
356 | } | ||
357 | |||
358 | static enum hotspot_event_handling workspace_hotspot_callback(struct swaybar_output *output, | 345 | static enum hotspot_event_handling workspace_hotspot_callback(struct swaybar_output *output, |
359 | int x, int y, enum x11_button button, void *data) { | 346 | int x, int y, enum x11_button button, void *data) { |
360 | if (button != LEFT) { | 347 | if (button != LEFT) { |
@@ -368,11 +355,6 @@ static uint32_t render_workspace_button(cairo_t *cairo, | |||
368 | struct swaybar_output *output, | 355 | struct swaybar_output *output, |
369 | struct swaybar_workspace *ws, double *x) { | 356 | struct swaybar_workspace *ws, double *x) { |
370 | struct swaybar_config *config = output->bar->config; | 357 | struct swaybar_config *config = output->bar->config; |
371 | const char *name = ws->name; | ||
372 | if (config->strip_workspace_numbers) { | ||
373 | name = strip_workspace_number(ws->name); | ||
374 | } | ||
375 | |||
376 | struct box_colors box_colors; | 358 | struct box_colors box_colors; |
377 | if (ws->urgent) { | 359 | if (ws->urgent) { |
378 | box_colors = config->colors.urgent_workspace; | 360 | box_colors = config->colors.urgent_workspace; |
@@ -388,7 +370,7 @@ static uint32_t render_workspace_button(cairo_t *cairo, | |||
388 | 370 | ||
389 | int text_width, text_height; | 371 | int text_width, text_height; |
390 | get_text_size(cairo, config->font, &text_width, &text_height, NULL, | 372 | get_text_size(cairo, config->font, &text_width, &text_height, NULL, |
391 | output->scale, config->pango_markup, "%s", name); | 373 | output->scale, config->pango_markup, "%s", ws->label); |
392 | 374 | ||
393 | int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; | 375 | int ws_vertical_padding = WS_VERTICAL_PADDING * output->scale; |
394 | int ws_horizontal_padding = WS_HORIZONTAL_PADDING * output->scale; | 376 | int ws_horizontal_padding = WS_HORIZONTAL_PADDING * output->scale; |
@@ -421,7 +403,7 @@ static uint32_t render_workspace_button(cairo_t *cairo, | |||
421 | cairo_set_source_u32(cairo, box_colors.text); | 403 | cairo_set_source_u32(cairo, box_colors.text); |
422 | cairo_move_to(cairo, *x + width / 2 - text_width / 2, (int)floor(text_y)); | 404 | cairo_move_to(cairo, *x + width / 2 - text_width / 2, (int)floor(text_y)); |
423 | pango_printf(cairo, config->font, output->scale, config->pango_markup, | 405 | pango_printf(cairo, config->font, output->scale, config->pango_markup, |
424 | "%s", name); | 406 | "%s", ws->label); |
425 | 407 | ||
426 | struct swaybar_hotspot *hotspot = calloc(1, sizeof(struct swaybar_hotspot)); | 408 | struct swaybar_hotspot *hotspot = calloc(1, sizeof(struct swaybar_hotspot)); |
427 | hotspot->x = *x; | 409 | hotspot->x = *x; |