version 1.110, 2022/05/30 13:00:18 |
version 1.111, 2022/12/07 09:44:44 |
|
|
#include <string.h> |
#include <string.h> |
#include <time.h> |
#include <time.h> |
#include <unistd.h> |
#include <unistd.h> |
|
#include <vis.h> |
|
|
#include "tmux.h" |
#include "tmux.h" |
|
|
|
|
|
|
/* Show message from command. */ |
/* Show message from command. */ |
void |
void |
cmdq_print(struct cmdq_item *item, const char *fmt, ...) |
cmdq_print_data(struct cmdq_item *item, int parse, struct evbuffer *evb) |
{ |
{ |
struct client *c = item->client; |
struct client *c = item->client; |
|
void *data = EVBUFFER_DATA(evb); |
|
size_t size = EVBUFFER_LENGTH(evb); |
struct window_pane *wp; |
struct window_pane *wp; |
struct window_mode_entry *wme; |
struct window_mode_entry *wme; |
va_list ap; |
char *sanitized, *msg, *line; |
char *tmp, *msg; |
|
|
|
va_start(ap, fmt); |
if (!parse) { |
xvasprintf(&msg, fmt, ap); |
utf8_stravisx(&msg, data, size, VIS_OCTAL|VIS_CSTYLE|VIS_TAB); |
va_end(ap); |
log_debug("%s: %s", __func__, msg); |
|
} else { |
|
msg = EVBUFFER_DATA(evb); |
|
if (msg[size - 1] != '\0') |
|
evbuffer_add(evb, "", 1); |
|
} |
|
|
log_debug("%s: %s", __func__, msg); |
|
|
|
if (c == NULL) |
if (c == NULL) |
/* nothing */; |
goto out; |
else if (c->session == NULL || (c->flags & CLIENT_CONTROL)) { |
|
|
if (c->session == NULL || (c->flags & CLIENT_CONTROL)) { |
if (~c->flags & CLIENT_UTF8) { |
if (~c->flags & CLIENT_UTF8) { |
tmp = msg; |
sanitized = utf8_sanitize(msg); |
msg = utf8_sanitize(tmp); |
if (c->flags & CLIENT_CONTROL) |
free(tmp); |
control_write(c, "%s", sanitized); |
|
else |
|
file_print(c, "%s\n", sanitized); |
|
free(sanitized); |
|
} else { |
|
if (c->flags & CLIENT_CONTROL) |
|
control_write(c, "%s", msg); |
|
else |
|
file_print(c, "%s\n", msg); |
} |
} |
if (c->flags & CLIENT_CONTROL) |
goto out; |
control_write(c, "%s", msg); |
} |
else |
|
file_print(c, "%s\n", msg); |
wp = server_client_get_pane(c); |
} else { |
wme = TAILQ_FIRST(&wp->modes); |
wp = server_client_get_pane(c); |
if (wme == NULL || wme->mode != &window_view_mode) |
wme = TAILQ_FIRST(&wp->modes); |
window_pane_set_mode(wp, NULL, &window_view_mode, NULL, NULL); |
if (wme == NULL || wme->mode != &window_view_mode) { |
if (parse) { |
window_pane_set_mode(wp, NULL, &window_view_mode, NULL, |
do { |
NULL); |
line = evbuffer_readln(evb, NULL, EVBUFFER_EOL_LF); |
|
if (line != NULL) { |
|
window_copy_add(wp, 1, "%s", line); |
|
free(line); |
|
} |
|
} while (line != NULL); |
|
|
|
size = EVBUFFER_LENGTH(evb); |
|
if (size != 0) { |
|
line = EVBUFFER_DATA(evb); |
|
window_copy_add(wp, 1, "%.*s", (int)size, line); |
} |
} |
|
} else |
window_copy_add(wp, 0, "%s", msg); |
window_copy_add(wp, 0, "%s", msg); |
} |
|
|
|
free(msg); |
out: |
|
if (!parse) |
|
free(msg); |
|
|
|
} |
|
|
|
/* Show message from command. */ |
|
void |
|
cmdq_print(struct cmdq_item *item, const char *fmt, ...) |
|
{ |
|
va_list ap; |
|
struct evbuffer *evb; |
|
|
|
evb = evbuffer_new(); |
|
if (evb == NULL) |
|
fatalx("out of memory"); |
|
|
|
va_start(ap, fmt); |
|
evbuffer_add_vprintf(evb, fmt, ap); |
|
va_end(ap); |
|
|
|
cmdq_print_data(item, 0, evb); |
|
evbuffer_free(evb); |
} |
} |
|
|
/* Show error from command. */ |
/* Show error from command. */ |