Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam 2015-07-13 16:01:09 +01:00
commit 38d4d69639
3 changed files with 59 additions and 16 deletions

View File

@ -27,16 +27,61 @@
* Show environment. * Show environment.
*/ */
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);
} }

View File

@ -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
View File

@ -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