version 1.12, 2016/01/19 15:59:12 |
version 1.13, 2016/06/16 10:55:47 |
|
|
|
|
#include <sys/types.h> |
#include <sys/types.h> |
|
|
|
#include <ctype.h> |
|
#include <stdlib.h> |
|
|
#include "tmux.h" |
#include "tmux.h" |
|
|
/* |
/* |
* Display panes on a client. |
* Display panes on a client. |
*/ |
*/ |
|
|
enum cmd_retval cmd_display_panes_exec(struct cmd *, struct cmd_q *); |
static enum cmd_retval cmd_display_panes_exec(struct cmd *, struct cmd_q *); |
|
|
|
static void cmd_display_panes_callback(struct client *, |
|
struct window_pane *); |
|
|
const struct cmd_entry cmd_display_panes_entry = { |
const struct cmd_entry cmd_display_panes_entry = { |
.name = "display-panes", |
.name = "display-panes", |
.alias = "displayp", |
.alias = "displayp", |
|
|
.args = { "t:", 0, 0 }, |
.args = { "t:", 0, 1 }, |
.usage = CMD_TARGET_CLIENT_USAGE, |
.usage = CMD_TARGET_CLIENT_USAGE, |
|
|
.tflag = CMD_CLIENT, |
.tflag = CMD_CLIENT, |
|
|
.exec = cmd_display_panes_exec |
.exec = cmd_display_panes_exec |
}; |
}; |
|
|
enum cmd_retval |
static enum cmd_retval |
cmd_display_panes_exec(__unused struct cmd *self, struct cmd_q *cmdq) |
cmd_display_panes_exec(struct cmd *self, struct cmd_q *cmdq) |
{ |
{ |
server_set_identify(cmdq->state.c); |
struct args *args = self->args; |
|
struct client *c = cmdq->state.c; |
|
|
|
if (c->identify_callback != NULL) |
|
return (CMD_RETURN_NORMAL); |
|
|
|
c->identify_callback = cmd_display_panes_callback; |
|
if (args->argc != 0) |
|
c->identify_callback_data = xstrdup(args->argv[0]); |
|
else |
|
c->identify_callback_data = xstrdup("select-pane -t '%%'"); |
|
|
|
server_set_identify(c); |
|
|
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
|
} |
|
|
|
static void |
|
cmd_display_panes_callback(struct client *c, struct window_pane *wp) |
|
{ |
|
struct cmd_list *cmdlist; |
|
char *template, *cmd, *expanded, *cause; |
|
|
|
template = c->identify_callback_data; |
|
if (wp != NULL) { |
|
xasprintf(&expanded, "%%%u", wp->id); |
|
cmd = cmd_template_replace(template, expanded, 1); |
|
|
|
if (cmd_string_parse(cmd, &cmdlist, NULL, 0, &cause) != 0) { |
|
if (cause != NULL) { |
|
*cause = toupper((u_char) *cause); |
|
status_message_set(c, "%s", cause); |
|
free(cause); |
|
} |
|
} else { |
|
cmdq_run(c->cmdq, cmdlist, NULL); |
|
cmd_list_free(cmdlist); |
|
} |
|
|
|
free(cmd); |
|
free(expanded); |
|
} |
|
|
|
free(c->identify_callback_data); |
|
c->identify_callback_data = NULL; |
|
c->identify_callback = NULL; |
} |
} |