Merge pull request #1564 from acrisci/feature/i3bar-markup-per-block
i3bar: set markup per block
This commit is contained in:
commit
f2b728ac5e
|
@ -172,6 +172,10 @@ separator_block_width::
|
||||||
this gap, a separator line will be drawn unless +separator+ is
|
this gap, a separator line will be drawn unless +separator+ is
|
||||||
disabled. Normally, you want to set this to an odd value (the default
|
disabled. Normally, you want to set this to an odd value (the default
|
||||||
is 9 pixels), since the separator line is drawn in the middle.
|
is 9 pixels), since the separator line is drawn in the middle.
|
||||||
|
markup::
|
||||||
|
A string that indicates how the text of the block should be parsed. Set to
|
||||||
|
+"pango"+ to use https://developer.gnome.org/pango/stable/PangoMarkupFormat.html[Pango markup]
|
||||||
|
(default). Set to +"none"+ to not use any markup.
|
||||||
|
|
||||||
If you want to put in your own entries into a block, prefix the key with an
|
If you want to put in your own entries into a block, prefix the key with an
|
||||||
underscore (_). i3bar will ignore all keys it doesn’t understand, and prefixing
|
underscore (_). i3bar will ignore all keys it doesn’t understand, and prefixing
|
||||||
|
|
|
@ -38,11 +38,18 @@ struct status_block {
|
||||||
i3String *short_text;
|
i3String *short_text;
|
||||||
|
|
||||||
char *color;
|
char *color;
|
||||||
|
|
||||||
|
/* min_width can be specified either as a numeric value (in pixels) or as a
|
||||||
|
* string. For strings, we set min_width to the measured text width of
|
||||||
|
* min_width_str. */
|
||||||
uint32_t min_width;
|
uint32_t min_width;
|
||||||
|
char *min_width_str;
|
||||||
|
|
||||||
blockalign_t align;
|
blockalign_t align;
|
||||||
|
|
||||||
bool urgent;
|
bool urgent;
|
||||||
bool no_separator;
|
bool no_separator;
|
||||||
|
bool is_markup;
|
||||||
|
|
||||||
/* The amount of pixels necessary to render a separater after the block. */
|
/* The amount of pixels necessary to render a separater after the block. */
|
||||||
uint32_t sep_block_width;
|
uint32_t sep_block_width;
|
||||||
|
|
|
@ -74,6 +74,7 @@ static void clear_statusline(struct statusline_head *head, bool free_resources)
|
||||||
FREE(first->color);
|
FREE(first->color);
|
||||||
FREE(first->name);
|
FREE(first->name);
|
||||||
FREE(first->instance);
|
FREE(first->instance);
|
||||||
|
FREE(first->min_width_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_REMOVE(head, first, blocks);
|
TAILQ_REMOVE(head, first, blocks);
|
||||||
|
@ -163,6 +164,9 @@ static int stdin_start_map(void *context) {
|
||||||
/* Default width of the separator block. */
|
/* Default width of the separator block. */
|
||||||
ctx->block.sep_block_width = logical_px(9);
|
ctx->block.sep_block_width = logical_px(9);
|
||||||
|
|
||||||
|
/* Use markup by default */
|
||||||
|
ctx->block.is_markup = true;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,6 +199,9 @@ static int stdin_string(void *context, const unsigned char *val, size_t len) {
|
||||||
if (strcasecmp(ctx->last_map_key, "color") == 0) {
|
if (strcasecmp(ctx->last_map_key, "color") == 0) {
|
||||||
sasprintf(&(ctx->block.color), "%.*s", len, val);
|
sasprintf(&(ctx->block.color), "%.*s", len, val);
|
||||||
}
|
}
|
||||||
|
if (strcasecmp(ctx->last_map_key, "markup") == 0) {
|
||||||
|
ctx->block.is_markup = (len == strlen("pango") && !strncasecmp((const char *)val, "pango", strlen("pango")));
|
||||||
|
}
|
||||||
if (strcasecmp(ctx->last_map_key, "align") == 0) {
|
if (strcasecmp(ctx->last_map_key, "align") == 0) {
|
||||||
if (len == strlen("center") && !strncmp((const char *)val, "center", strlen("center"))) {
|
if (len == strlen("center") && !strncmp((const char *)val, "center", strlen("center"))) {
|
||||||
ctx->block.align = ALIGN_CENTER;
|
ctx->block.align = ALIGN_CENTER;
|
||||||
|
@ -204,9 +211,10 @@ static int stdin_string(void *context, const unsigned char *val, size_t len) {
|
||||||
ctx->block.align = ALIGN_LEFT;
|
ctx->block.align = ALIGN_LEFT;
|
||||||
}
|
}
|
||||||
} else if (strcasecmp(ctx->last_map_key, "min_width") == 0) {
|
} else if (strcasecmp(ctx->last_map_key, "min_width") == 0) {
|
||||||
i3String *text = i3string_from_markup_with_length((const char *)val, len);
|
char *copy = (char *)malloc(len + 1);
|
||||||
ctx->block.min_width = (uint32_t)predict_text_width(text);
|
strncpy(copy, (const char *)val, len);
|
||||||
i3string_free(text);
|
copy[len] = 0;
|
||||||
|
ctx->block.min_width_str = copy;
|
||||||
}
|
}
|
||||||
if (strcasecmp(ctx->last_map_key, "name") == 0) {
|
if (strcasecmp(ctx->last_map_key, "name") == 0) {
|
||||||
char *copy = (char *)malloc(len + 1);
|
char *copy = (char *)malloc(len + 1);
|
||||||
|
@ -248,6 +256,17 @@ static int stdin_end_map(void *context) {
|
||||||
new_block->full_text = i3string_from_utf8("SPEC VIOLATION: full_text is NULL!");
|
new_block->full_text = i3string_from_utf8("SPEC VIOLATION: full_text is NULL!");
|
||||||
if (new_block->urgent)
|
if (new_block->urgent)
|
||||||
ctx->has_urgent = true;
|
ctx->has_urgent = true;
|
||||||
|
|
||||||
|
if (new_block->min_width_str) {
|
||||||
|
i3String *text = i3string_from_utf8(new_block->min_width_str);
|
||||||
|
i3string_set_markup(text, new_block->is_markup);
|
||||||
|
new_block->min_width = (uint32_t)predict_text_width(text);
|
||||||
|
i3string_free(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
i3string_set_markup(new_block->full_text, new_block->is_markup);
|
||||||
|
i3string_set_markup(new_block->short_text, new_block->is_markup);
|
||||||
|
|
||||||
TAILQ_INSERT_TAIL(&statusline_buffer, new_block, blocks);
|
TAILQ_INSERT_TAIL(&statusline_buffer, new_block, blocks);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,6 +217,11 @@ size_t i3string_get_num_bytes(i3String *str);
|
||||||
*/
|
*/
|
||||||
bool i3string_is_markup(i3String *str);
|
bool i3string_is_markup(i3String *str);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether the i3String should use Pango markup.
|
||||||
|
*/
|
||||||
|
void i3string_set_markup(i3String *str, bool is_markup);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of glyphs in an i3String.
|
* Returns the number of glyphs in an i3String.
|
||||||
*
|
*
|
||||||
|
|
|
@ -178,6 +178,13 @@ bool i3string_is_markup(i3String *str) {
|
||||||
return str->is_markup;
|
return str->is_markup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set whether the i3String should use Pango markup.
|
||||||
|
*/
|
||||||
|
void i3string_set_markup(i3String *str, bool is_markup) {
|
||||||
|
str->is_markup = is_markup;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the number of glyphs in an i3String.
|
* Returns the number of glyphs in an i3String.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue