mirror of
https://github.com/tmate-io/tmate.git
synced 2024-11-07 16:54:01 +01:00
show-* and set-* need to handle a missing target.
This commit is contained in:
parent
fa81d838da
commit
df0983af39
@ -47,7 +47,7 @@ cmd_set_environment_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
{
|
{
|
||||||
struct args *args = self->args;
|
struct args *args = self->args;
|
||||||
struct environ *env;
|
struct environ *env;
|
||||||
const char *name, *value;
|
const char *name, *value, *target;
|
||||||
|
|
||||||
name = args->argv[0];
|
name = args->argv[0];
|
||||||
if (*name == '\0') {
|
if (*name == '\0') {
|
||||||
@ -64,10 +64,19 @@ cmd_set_environment_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
else
|
else
|
||||||
value = args->argv[1];
|
value = args->argv[1];
|
||||||
|
|
||||||
if (args_has(self->args, 'g') || cmdq->state.tflag.s == NULL)
|
if (args_has(self->args, 'g'))
|
||||||
env = global_environ;
|
env = global_environ;
|
||||||
else
|
else {
|
||||||
|
if (cmdq->state.tflag.s == NULL) {
|
||||||
|
target = args_get(args, 't');
|
||||||
|
if (target != NULL)
|
||||||
|
cmdq_error(cmdq, "no such session: %s", target);
|
||||||
|
else
|
||||||
|
cmdq_error(cmdq, "no current session");
|
||||||
|
return (CMD_RETURN_ERROR);
|
||||||
|
}
|
||||||
env = cmdq->state.tflag.s->environ;
|
env = cmdq->state.tflag.s->environ;
|
||||||
|
}
|
||||||
|
|
||||||
if (args_has(self->args, 'u')) {
|
if (args_has(self->args, 'u')) {
|
||||||
if (value != NULL) {
|
if (value != NULL) {
|
||||||
|
@ -100,7 +100,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
struct client *c;
|
struct client *c;
|
||||||
const struct options_table_entry *oe;
|
const struct options_table_entry *oe;
|
||||||
struct options *oo;
|
struct options *oo;
|
||||||
const char *optstr, *valstr;
|
const char *optstr, *valstr, *target;
|
||||||
|
|
||||||
/* Get the option name and value. */
|
/* Get the option name and value. */
|
||||||
optstr = args->argv[0];
|
optstr = args->argv[0];
|
||||||
@ -140,29 +140,29 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
else if (oe->scope == OPTIONS_TABLE_WINDOW) {
|
else if (oe->scope == OPTIONS_TABLE_WINDOW) {
|
||||||
if (args_has(self->args, 'g'))
|
if (args_has(self->args, 'g'))
|
||||||
oo = global_w_options;
|
oo = global_w_options;
|
||||||
else {
|
else if (wl == NULL) {
|
||||||
if (wl == NULL) {
|
target = args_get(args, 't');
|
||||||
cmdq_error(cmdq,
|
if (target != NULL) {
|
||||||
"couldn't set '%s'%s", optstr,
|
cmdq_error(cmdq, "no such window: %s",
|
||||||
(!args_has(args, 't') && !args_has(args,
|
target);
|
||||||
'g')) ? " need target window or -g" : "");
|
} else
|
||||||
return (CMD_RETURN_ERROR);
|
cmdq_error(cmdq, "no current window");
|
||||||
}
|
return (CMD_RETURN_ERROR);
|
||||||
|
} else
|
||||||
oo = wl->window->options;
|
oo = wl->window->options;
|
||||||
}
|
|
||||||
} else if (oe->scope == OPTIONS_TABLE_SESSION) {
|
} else if (oe->scope == OPTIONS_TABLE_SESSION) {
|
||||||
if (args_has(self->args, 'g'))
|
if (args_has(self->args, 'g'))
|
||||||
oo = global_s_options;
|
oo = global_s_options;
|
||||||
else {
|
else if (s == NULL) {
|
||||||
if (s == NULL) {
|
target = args_get(args, 't');
|
||||||
cmdq_error(cmdq,
|
if (target != NULL) {
|
||||||
"couldn't set '%s'%s", optstr,
|
cmdq_error(cmdq, "no such session: %s",
|
||||||
(!args_has(args, 't') && !args_has(args,
|
target);
|
||||||
'g')) ? " need target session or -g" : "");
|
} else
|
||||||
return (CMD_RETURN_ERROR);
|
cmdq_error(cmdq, "no current session");
|
||||||
}
|
return (CMD_RETURN_ERROR);
|
||||||
|
} else
|
||||||
oo = s->options;
|
oo = s->options;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
cmdq_error(cmdq, "unknown table");
|
cmdq_error(cmdq, "unknown table");
|
||||||
return (CMD_RETURN_ERROR);
|
return (CMD_RETURN_ERROR);
|
||||||
|
@ -93,11 +93,28 @@ cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
struct args *args = self->args;
|
struct args *args = self->args;
|
||||||
struct environ *env;
|
struct environ *env;
|
||||||
struct environ_entry *envent;
|
struct environ_entry *envent;
|
||||||
|
const char *target;
|
||||||
|
|
||||||
if (args_has(self->args, 'g') || cmdq->state.tflag.s == NULL)
|
if ((target = args_get(args, 't')) != NULL) {
|
||||||
|
if (cmdq->state.tflag.s == NULL) {
|
||||||
|
cmdq_error(cmdq, "no such session: %s", target);
|
||||||
|
return (CMD_RETURN_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args_has(self->args, 'g'))
|
||||||
env = global_environ;
|
env = global_environ;
|
||||||
else
|
else {
|
||||||
|
if (cmdq->state.tflag.s == NULL) {
|
||||||
|
target = args_get(args, 't');
|
||||||
|
if (target != NULL)
|
||||||
|
cmdq_error(cmdq, "no such session: %s", target);
|
||||||
|
else
|
||||||
|
cmdq_error(cmdq, "no current session");
|
||||||
|
return (CMD_RETURN_ERROR);
|
||||||
|
}
|
||||||
env = cmdq->state.tflag.s->environ;
|
env = cmdq->state.tflag.s->environ;
|
||||||
|
}
|
||||||
|
|
||||||
if (args->argc != 0) {
|
if (args->argc != 0) {
|
||||||
envent = environ_find(env, args->argv[0]);
|
envent = environ_find(env, args->argv[0]);
|
||||||
|
@ -63,12 +63,13 @@ const struct cmd_entry cmd_show_window_options_entry = {
|
|||||||
enum cmd_retval
|
enum cmd_retval
|
||||||
cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
|
cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
|
||||||
{
|
{
|
||||||
struct args *args = self->args;
|
struct args *args = self->args;
|
||||||
struct session *s = cmdq->state.tflag.s;
|
struct session *s = cmdq->state.tflag.s;
|
||||||
struct winlink *wl = cmdq->state.tflag.wl;
|
struct winlink *wl = cmdq->state.tflag.wl;
|
||||||
struct options *oo;
|
struct options *oo;
|
||||||
enum options_table_scope scope;
|
enum options_table_scope scope;
|
||||||
int quiet;
|
int quiet;
|
||||||
|
const char *target;
|
||||||
|
|
||||||
if (args_has(self->args, 's')) {
|
if (args_has(self->args, 's')) {
|
||||||
oo = global_options;
|
oo = global_options;
|
||||||
@ -78,13 +79,27 @@ cmd_show_options_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
scope = OPTIONS_TABLE_WINDOW;
|
scope = OPTIONS_TABLE_WINDOW;
|
||||||
if (args_has(self->args, 'g'))
|
if (args_has(self->args, 'g'))
|
||||||
oo = global_w_options;
|
oo = global_w_options;
|
||||||
else
|
else if (wl == NULL) {
|
||||||
|
target = args_get(args, 't');
|
||||||
|
if (target != NULL) {
|
||||||
|
cmdq_error(cmdq, "no such window: %s", target);
|
||||||
|
} else
|
||||||
|
cmdq_error(cmdq, "no current window");
|
||||||
|
return (CMD_RETURN_ERROR);
|
||||||
|
} else
|
||||||
oo = wl->window->options;
|
oo = wl->window->options;
|
||||||
} else {
|
} else {
|
||||||
scope = OPTIONS_TABLE_SESSION;
|
scope = OPTIONS_TABLE_SESSION;
|
||||||
if (args_has(self->args, 'g'))
|
if (args_has(self->args, 'g'))
|
||||||
oo = global_s_options;
|
oo = global_s_options;
|
||||||
else
|
else if (s == NULL) {
|
||||||
|
target = args_get(args, 't');
|
||||||
|
if (target != NULL) {
|
||||||
|
cmdq_error(cmdq, "no such session: %s", target);
|
||||||
|
} else
|
||||||
|
cmdq_error(cmdq, "no current session");
|
||||||
|
return (CMD_RETURN_ERROR);
|
||||||
|
} else
|
||||||
oo = s->options;
|
oo = s->options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user