=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-load-buffer.c,v retrieving revision 1.60 retrieving revision 1.61 diff -c -r1.60 -r1.61 *** src/usr.bin/tmux/cmd-load-buffer.c 2020/04/13 20:51:57 1.60 --- src/usr.bin/tmux/cmd-load-buffer.c 2020/09/02 13:46:35 1.61 *************** *** 1,4 **** ! /* $OpenBSD: cmd-load-buffer.c,v 1.60 2020/04/13 20:51:57 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha --- 1,4 ---- ! /* $OpenBSD: cmd-load-buffer.c,v 1.61 2020/09/02 13:46:35 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha *************** *** 37,50 **** .name = "load-buffer", .alias = "loadb", ! .args = { "b:", 1, 1 }, ! .usage = CMD_BUFFER_USAGE " path", ! .flags = CMD_AFTERHOOK, .exec = cmd_load_buffer_exec }; struct cmd_load_buffer_data { struct cmdq_item *item; char *name; }; --- 37,51 ---- .name = "load-buffer", .alias = "loadb", ! .args = { "b:t:w", 1, 1 }, ! .usage = CMD_BUFFER_USAGE " " CMD_TARGET_CLIENT_USAGE " path", ! .flags = CMD_AFTERHOOK|CMD_CLIENT_TFLAG|CMD_CLIENT_CANFAIL, .exec = cmd_load_buffer_exec }; struct cmd_load_buffer_data { + struct client *client; struct cmdq_item *item; char *name; }; *************** *** 54,59 **** --- 55,61 ---- int closed, struct evbuffer *buffer, void *data) { struct cmd_load_buffer_data *cdata = data; + struct client *tc = cdata->client; struct cmdq_item *item = cdata->item; void *bdata = EVBUFFER_DATA(buffer); size_t bsize = EVBUFFER_LENGTH(buffer); *************** *** 72,78 **** cmdq_error(item, "%s", cause); free(cause); free(copy); ! } } cmdq_continue(item); --- 74,85 ---- cmdq_error(item, "%s", cause); free(cause); 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); *************** *** 84,89 **** --- 91,97 ---- cmd_load_buffer_exec(struct cmd *self, struct cmdq_item *item) { struct args *args = cmd_get_args(self); + struct client *tc = cmdq_get_target_client(item); struct cmd_load_buffer_data *cdata; const char *bufname = args_get(args, 'b'); char *path; *************** *** 94,99 **** --- 102,111 ---- cdata->name = xstrdup(bufname); else 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]); file_read(cmdq_get_client(item), path, cmd_load_buffer_done, cdata);