version 1.10, 2012/08/14 08:51:53 |
version 1.11, 2013/03/21 16:08:24 |
|
|
|
|
enum cmd_retval cmd_choose_buffer_exec(struct cmd *, struct cmd_ctx *); |
enum cmd_retval cmd_choose_buffer_exec(struct cmd *, struct cmd_ctx *); |
|
|
void cmd_choose_buffer_callback(struct window_choose_data *); |
|
void cmd_choose_buffer_free(struct window_choose_data *); |
|
|
|
const struct cmd_entry cmd_choose_buffer_entry = { |
const struct cmd_entry cmd_choose_buffer_entry = { |
"choose-buffer", NULL, |
"choose-buffer", NULL, |
"F:t:", 0, 1, |
"F:t:", 0, 1, |
|
|
cmd_choose_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) |
cmd_choose_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) |
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
|
struct client *c; |
struct window_choose_data *cdata; |
struct window_choose_data *cdata; |
struct winlink *wl; |
struct winlink *wl; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
|
|
ctx->error(ctx, "must be run interactively"); |
ctx->error(ctx, "must be run interactively"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
c = ctx->curclient; |
|
|
if ((template = args_get(args, 'F')) == NULL) |
if ((template = args_get(args, 'F')) == NULL) |
template = CHOOSE_BUFFER_TEMPLATE; |
template = CHOOSE_BUFFER_TEMPLATE; |
|
|
|
|
idx = 0; |
idx = 0; |
while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) { |
while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) { |
cdata = window_choose_data_create(ctx); |
cdata = window_choose_data_create(TREE_OTHER, c, c->session); |
cdata->idx = idx - 1; |
cdata->idx = idx - 1; |
cdata->client->references++; |
|
|
|
cdata->ft_template = xstrdup(template); |
cdata->ft_template = xstrdup(template); |
format_add(cdata->ft, "line", "%u", idx - 1); |
format_add(cdata->ft, "line", "%u", idx - 1); |
|
|
} |
} |
free(action); |
free(action); |
|
|
window_choose_ready(wl->window->active, |
window_choose_ready(wl->window->active, 0, NULL, NULL); |
0, cmd_choose_buffer_callback, cmd_choose_buffer_free); |
|
|
|
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
|
|
|
void |
|
cmd_choose_buffer_callback(struct window_choose_data *cdata) |
|
{ |
|
if (cdata == NULL) |
|
return; |
|
if (cdata->client->flags & CLIENT_DEAD) |
|
return; |
|
|
|
window_choose_ctx(cdata); |
|
} |
|
|
|
void |
|
cmd_choose_buffer_free(struct window_choose_data *data) |
|
{ |
|
struct window_choose_data *cdata = data; |
|
|
|
if (cdata == NULL) |
|
return; |
|
|
|
cdata->client->references--; |
|
|
|
free(cdata->command); |
|
free(cdata->ft_template); |
|
free(cdata); |
|
} |
} |