version 1.60, 2020/04/13 20:51:57 |
version 1.61, 2020/09/02 13:46:35 |
|
|
.name = "load-buffer", |
.name = "load-buffer", |
.alias = "loadb", |
.alias = "loadb", |
|
|
.args = { "b:", 1, 1 }, |
.args = { "b:t:w", 1, 1 }, |
.usage = CMD_BUFFER_USAGE " path", |
.usage = CMD_BUFFER_USAGE " " CMD_TARGET_CLIENT_USAGE " path", |
|
|
.flags = CMD_AFTERHOOK, |
.flags = CMD_AFTERHOOK|CMD_CLIENT_TFLAG|CMD_CLIENT_CANFAIL, |
.exec = cmd_load_buffer_exec |
.exec = cmd_load_buffer_exec |
}; |
}; |
|
|
struct cmd_load_buffer_data { |
struct cmd_load_buffer_data { |
|
struct client *client; |
struct cmdq_item *item; |
struct cmdq_item *item; |
char *name; |
char *name; |
}; |
}; |
|
|
int closed, struct evbuffer *buffer, void *data) |
int closed, struct evbuffer *buffer, void *data) |
{ |
{ |
struct cmd_load_buffer_data *cdata = data; |
struct cmd_load_buffer_data *cdata = data; |
|
struct client *tc = cdata->client; |
struct cmdq_item *item = cdata->item; |
struct cmdq_item *item = cdata->item; |
void *bdata = EVBUFFER_DATA(buffer); |
void *bdata = EVBUFFER_DATA(buffer); |
size_t bsize = EVBUFFER_LENGTH(buffer); |
size_t bsize = EVBUFFER_LENGTH(buffer); |
|
|
cmdq_error(item, "%s", cause); |
cmdq_error(item, "%s", cause); |
free(cause); |
free(cause); |
free(copy); |
free(copy); |
} |
} else if (tc != NULL && |
|
tc->session != NULL && |
|
(~tc->flags & CLIENT_DEAD)) |
|
tty_set_selection(&tc->tty, copy, bsize); |
|
if (tc != NULL) |
|
server_client_unref(tc); |
} |
} |
cmdq_continue(item); |
cmdq_continue(item); |
|
|
|
|
cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) |
cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) |
{ |
{ |
struct args *args = cmd_get_args(self); |
struct args *args = cmd_get_args(self); |
|
struct client *tc = cmdq_get_target_client(item); |
struct cmd_load_buffer_data *cdata; |
struct cmd_load_buffer_data *cdata; |
const char *bufname = args_get(args, 'b'); |
const char *bufname = args_get(args, 'b'); |
char *path; |
char *path; |
|
|
cdata->name = xstrdup(bufname); |
cdata->name = xstrdup(bufname); |
else |
else |
cdata->name = NULL; |
cdata->name = NULL; |
|
if (args_has(args, 'w') && tc != NULL) { |
|
cdata->client = tc; |
|
cdata->client->references++; |
|
} |
|
|
path = format_single_from_target(item, args->argv[0]); |
path = format_single_from_target(item, args->argv[0]); |
file_read(cmdq_get_client(item), path, cmd_load_buffer_done, cdata); |
file_read(cmdq_get_client(item), path, cmd_load_buffer_done, cdata); |