mirror of
https://github.com/tmate-io/tmate.git
synced 2024-12-02 04:53:10 +01:00
Merge branch 'obsd-master'
This commit is contained in:
commit
38d4d69639
@ -29,14 +29,59 @@
|
|||||||
|
|
||||||
enum cmd_retval cmd_show_environment_exec(struct cmd *, struct cmd_q *);
|
enum cmd_retval cmd_show_environment_exec(struct cmd *, struct cmd_q *);
|
||||||
|
|
||||||
|
char *cmd_show_environment_escape(struct environ_entry *);
|
||||||
|
void cmd_show_environment_print(struct cmd *, struct cmd_q *,
|
||||||
|
struct environ_entry *);
|
||||||
|
|
||||||
const struct cmd_entry cmd_show_environment_entry = {
|
const struct cmd_entry cmd_show_environment_entry = {
|
||||||
"show-environment", "showenv",
|
"show-environment", "showenv",
|
||||||
"gt:", 0, 1,
|
"gst:", 0, 1,
|
||||||
"[-g] " CMD_TARGET_SESSION_USAGE " [name]",
|
"[-gs] " CMD_TARGET_SESSION_USAGE " [name]",
|
||||||
0,
|
0,
|
||||||
cmd_show_environment_exec
|
cmd_show_environment_exec
|
||||||
};
|
};
|
||||||
|
|
||||||
|
char *
|
||||||
|
cmd_show_environment_escape(struct environ_entry *envent)
|
||||||
|
{
|
||||||
|
const char *value = envent->value;
|
||||||
|
char c, *out, *ret;
|
||||||
|
|
||||||
|
out = ret = xmalloc(strlen(value) * 2 + 1); /* at most twice the size */
|
||||||
|
while ((c = *value++) != '\0') {
|
||||||
|
/* POSIX interprets $ ` " and \ in double quotes. */
|
||||||
|
if (c == '$' || c == '`' || c == '"' || c == '\\')
|
||||||
|
*out++ = '\\';
|
||||||
|
*out++ = c;
|
||||||
|
}
|
||||||
|
*out = '\0';
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
cmd_show_environment_print(struct cmd *self, struct cmd_q *cmdq,
|
||||||
|
struct environ_entry *envent)
|
||||||
|
{
|
||||||
|
char *escaped;
|
||||||
|
|
||||||
|
if (!args_has(self->args, 's')) {
|
||||||
|
if (envent->value != NULL)
|
||||||
|
cmdq_print(cmdq, "%s=%s", envent->name, envent->value);
|
||||||
|
else
|
||||||
|
cmdq_print(cmdq, "-%s", envent->name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (envent->value != NULL) {
|
||||||
|
escaped = cmd_show_environment_escape(envent);
|
||||||
|
cmdq_print(cmdq, "%s=\"%s\"; export %s;", envent->name, escaped,
|
||||||
|
envent->name);
|
||||||
|
free(escaped);
|
||||||
|
} else
|
||||||
|
cmdq_print(cmdq, "unset %s;", envent->name);
|
||||||
|
}
|
||||||
|
|
||||||
enum cmd_retval
|
enum cmd_retval
|
||||||
cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)
|
cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)
|
||||||
{
|
{
|
||||||
@ -48,7 +93,8 @@ cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
if (args_has(self->args, 'g'))
|
if (args_has(self->args, 'g'))
|
||||||
env = &global_environ;
|
env = &global_environ;
|
||||||
else {
|
else {
|
||||||
if ((s = cmd_find_session(cmdq, args_get(args, 't'), 0)) == NULL)
|
s = cmd_find_session(cmdq, args_get(args, 't'), 0);
|
||||||
|
if (s == NULL)
|
||||||
return (CMD_RETURN_ERROR);
|
return (CMD_RETURN_ERROR);
|
||||||
env = &s->environ;
|
env = &s->environ;
|
||||||
}
|
}
|
||||||
@ -59,19 +105,11 @@ cmd_show_environment_exec(struct cmd *self, struct cmd_q *cmdq)
|
|||||||
cmdq_error(cmdq, "unknown variable: %s", args->argv[0]);
|
cmdq_error(cmdq, "unknown variable: %s", args->argv[0]);
|
||||||
return (CMD_RETURN_ERROR);
|
return (CMD_RETURN_ERROR);
|
||||||
}
|
}
|
||||||
if (envent->value != NULL)
|
cmd_show_environment_print(self, cmdq, envent);
|
||||||
cmdq_print(cmdq, "%s=%s", envent->name, envent->value);
|
|
||||||
else
|
|
||||||
cmdq_print(cmdq, "-%s", envent->name);
|
|
||||||
return (CMD_RETURN_NORMAL);
|
return (CMD_RETURN_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
RB_FOREACH(envent, environ, env) {
|
RB_FOREACH(envent, environ, env)
|
||||||
if (envent->value != NULL)
|
cmd_show_environment_print(self, cmdq, envent);
|
||||||
cmdq_print(cmdq, "%s=%s", envent->name, envent->value);
|
|
||||||
else
|
|
||||||
cmdq_print(cmdq, "-%s", envent->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (CMD_RETURN_NORMAL);
|
return (CMD_RETURN_NORMAL);
|
||||||
}
|
}
|
||||||
|
@ -795,6 +795,8 @@ screen_write_linefeed(struct screen_write_ctx *ctx, int wrapped)
|
|||||||
gl = &s->grid->linedata[s->grid->hsize + s->cy];
|
gl = &s->grid->linedata[s->grid->hsize + s->cy];
|
||||||
if (wrapped)
|
if (wrapped)
|
||||||
gl->flags |= GRID_LINE_WRAPPED;
|
gl->flags |= GRID_LINE_WRAPPED;
|
||||||
|
else
|
||||||
|
gl->flags &= ~GRID_LINE_WRAPPED;
|
||||||
|
|
||||||
if (s->cy == s->rlower)
|
if (s->cy == s->rlower)
|
||||||
grid_view_scroll_region_up(s->grid, s->rupper, s->rlower);
|
grid_view_scroll_region_up(s->grid, s->rupper, s->rlower);
|
||||||
|
5
tmux.1
5
tmux.1
@ -3547,7 +3547,7 @@ flag unsets a variable.
|
|||||||
indicates the variable is to be removed from the environment before starting a
|
indicates the variable is to be removed from the environment before starting a
|
||||||
new process.
|
new process.
|
||||||
.It Xo Ic show-environment
|
.It Xo Ic show-environment
|
||||||
.Op Fl g
|
.Op Fl gs
|
||||||
.Op Fl t Ar target-session
|
.Op Fl t Ar target-session
|
||||||
.Op Ar variable
|
.Op Ar variable
|
||||||
.Xc
|
.Xc
|
||||||
@ -3561,6 +3561,9 @@ If
|
|||||||
is omitted, all variables are shown.
|
is omitted, all variables are shown.
|
||||||
Variables removed from the environment are prefixed with
|
Variables removed from the environment are prefixed with
|
||||||
.Ql - .
|
.Ql - .
|
||||||
|
If
|
||||||
|
.Fl s
|
||||||
|
is used, the output is formatted as a set of Bourne shell commands.
|
||||||
.El
|
.El
|
||||||
.Sh STATUS LINE
|
.Sh STATUS LINE
|
||||||
.Nm
|
.Nm
|
||||||
|
Loading…
Reference in New Issue
Block a user