diff options
author | nicm <nicm> | 2020-05-16 15:54:20 +0000 |
---|---|---|
committer | nicm <nicm> | 2020-05-16 15:54:20 +0000 |
commit | 472d77fd0f4af8431267473df3cf109030760fa1 (patch) | |
tree | 530d3b42bf1409311fe085b3d9904108189a328f | |
parent | 6ea6d46d0a1b206ece54a05af4f3fe7a3d6fe4cc (diff) | |
download | rtmux-472d77fd0f4af8431267473df3cf109030760fa1.tar.gz rtmux-472d77fd0f4af8431267473df3cf109030760fa1.tar.bz2 rtmux-472d77fd0f4af8431267473df3cf109030760fa1.zip |
Support embedded styles in the display-message message, GitHub issue
2206.
-rw-r--r-- | alerts.c | 8 | ||||
-rw-r--r-- | cmd-display-message.c | 2 | ||||
-rw-r--r-- | cmd-list-keys.c | 2 | ||||
-rw-r--r-- | cmd-queue.c | 2 | ||||
-rw-r--r-- | mode-tree.c | 2 | ||||
-rw-r--r-- | status.c | 8 | ||||
-rw-r--r-- | tmux.h | 4 |
7 files changed, 18 insertions, 10 deletions
@@ -316,8 +316,10 @@ alerts_set_message(struct winlink *wl, const char *type, const char *option) if (visual == VISUAL_OFF) continue; if (c->session->curw == wl) - status_message_set(c, "%s in current window", type); - else - status_message_set(c, "%s in window %d", type, wl->idx); + status_message_set(c, 1, "%s in current window", type); + else { + status_message_set(c, 1, "%s in window %d", type, + wl->idx); + } } } diff --git a/cmd-display-message.c b/cmd-display-message.c index 4e69f03a..634f0a93 100644 --- a/cmd-display-message.c +++ b/cmd-display-message.c @@ -117,7 +117,7 @@ cmd_display_message_exec(struct cmd *self, struct cmdq_item *item) if (args_has(args, 'p')) cmdq_print(item, "%s", msg); else if (tc != NULL) - status_message_set(tc, "%s", msg); + status_message_set(tc, 0, "%s", msg); free(msg); format_free(ft); diff --git a/cmd-list-keys.c b/cmd-list-keys.c index 1141bbb5..4e7ba39c 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -112,7 +112,7 @@ cmd_list_keys_print_notes(struct cmdq_item *item, struct args *args, note = xstrdup(bd->note); tmp = utf8_padcstr(key, keywidth + 1); if (args_has(args, '1') && tc != NULL) - status_message_set(tc, "%s%s%s", prefix, tmp, note); + status_message_set(tc, 1, "%s%s%s", prefix, tmp, note); else cmdq_print(item, "%s%s%s", prefix, tmp, note); free(tmp); diff --git a/cmd-queue.c b/cmd-queue.c index 26e2f2f9..a40053a6 100644 --- a/cmd-queue.c +++ b/cmd-queue.c @@ -856,7 +856,7 @@ cmdq_error(struct cmdq_item *item, const char *fmt, ...) c->retval = 1; } else { *msg = toupper((u_char) *msg); - status_message_set(c, "%s", msg); + status_message_set(c, 1, "%s", msg); } free(msg); diff --git a/mode-tree.c b/mode-tree.c index c08c802d..b3b3f335 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -1110,7 +1110,7 @@ mode_tree_run_command(struct client *c, struct cmd_find_state *fs, if (status == CMD_PARSE_ERROR) { if (c != NULL) { *error = toupper((u_char)*error); - status_message_set(c, "%s", error); + status_message_set(c, 1, "%s", error); } free(error); } @@ -423,7 +423,7 @@ status_redraw(struct client *c) /* Set a status line message. */ void -status_message_set(struct client *c, const char *fmt, ...) +status_message_set(struct client *c, int ignore_styles, const char *fmt, ...) { struct timeval tv; va_list ap; @@ -433,6 +433,7 @@ status_message_set(struct client *c, const char *fmt, ...) status_push_screen(c); va_start(ap, fmt); + c->message_ignore_styles = ignore_styles; xvasprintf(&c->message_string, fmt, ap); va_end(ap); @@ -515,7 +516,10 @@ status_message_redraw(struct client *c) for (offset = 0; offset < c->tty.sx; offset++) screen_write_putc(&ctx, &gc, ' '); screen_write_cursormove(&ctx, 0, lines - 1, 0); - screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); + if (c->message_ignore_styles) + screen_write_nputs(&ctx, len, &gc, "%s", c->message_string); + else + format_draw(&ctx, &gc, c->tty.sx, c->message_string, NULL); screen_write_stop(&ctx); if (grid_compare(sl->active->grid, old_screen.grid) == 0) { @@ -1603,6 +1603,7 @@ struct client { uint64_t redraw_panes; + int message_ignore_styles; char *message_string; struct event message_timer; @@ -2340,7 +2341,8 @@ struct style_range *status_get_range(struct client *, u_int, u_int); void status_init(struct client *); void status_free(struct client *); int status_redraw(struct client *); -void printflike(2, 3) status_message_set(struct client *, const char *, ...); +void printflike(3, 4) status_message_set(struct client *, int, const char *, + ...); void status_message_clear(struct client *); int status_message_redraw(struct client *); void status_prompt_set(struct client *, const char *, const char *, |