From 6491274f60c175b89b02b6e4cd0c59b13717e2ec Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sat, 8 Aug 2009 21:52:43 +0000 Subject: Infrastructure and commands to manage the environment for processes started within tmux. There is a global environment, copied from the external environment when the server is started and each sesssion has an (initially empty) session environment which overrides it. New commands set-environment and show-environment manipulate or display the environments. A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY. --- cmd-show-environment.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 cmd-show-environment.c (limited to 'cmd-show-environment.c') diff --git a/cmd-show-environment.c b/cmd-show-environment.c new file mode 100644 index 00000000..6a86ec67 --- /dev/null +++ b/cmd-show-environment.c @@ -0,0 +1,67 @@ +/* $OpenBSD$ */ + +/* + * Copyright (c) 2009 Nicholas Marriott + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include + +#include "tmux.h" + +/* + * Show environment. + */ + +int cmd_show_environment_exec(struct cmd *, struct cmd_ctx *); + +const struct cmd_entry cmd_show_environment_entry = { + "show-environment", "showenv", + "[-g] " CMD_TARGET_SESSION_USAGE, + 0, CMD_CHFLAG('g'), + cmd_target_init, + cmd_target_parse, + cmd_show_environment_exec, + cmd_target_free, + cmd_target_print +}; + +int +cmd_show_environment_exec(struct cmd *self, struct cmd_ctx *ctx) +{ + struct cmd_target_data *data = self->data; + struct session *s; + struct environ *env; + struct environ_entry *envent; + + if (data->chflags & CMD_CHFLAG('g')) + env = &global_environ; + else { + if ((s = cmd_find_session(ctx, data->target)) == NULL) + return (-1); + env = &s->environ; + } + + RB_FOREACH(envent, environ, env) { + if (envent->value != NULL) + ctx->print(ctx, "%s=%s", envent->name, envent->value); + else + ctx->print(ctx, "-%s", envent->name); + } + + return (0); +} -- cgit v1.2.3