[gnome-terminal] client: legacy: Add option to not pass the environment
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-terminal] client: legacy: Add option to not pass the environment
- Date: Thu, 23 Apr 2020 21:18:37 +0000 (UTC)
commit 4a491e99ee942285a55ebef6caf9558804ebca67
Author: Christian Persch <chpe src gnome org>
Date: Thu Apr 23 23:18:08 2020 +0200
client: legacy: Add option to not pass the environment
Add --no-environment option that makes the client not pass
the client's environment to the server to be used as the
environment for the newly created terminal.
https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/253
src/terminal-client-utils.c | 45 ++++++++++++++++++++++++---------------------
src/terminal-client-utils.h | 1 +
src/terminal-options.c | 9 +++++++++
src/terminal-options.h | 1 +
src/terminal.c | 1 +
5 files changed, 36 insertions(+), 21 deletions(-)
---
diff --git a/src/terminal-client-utils.c b/src/terminal-client-utils.c
index 323f98d3..8ddfb7a3 100644
--- a/src/terminal-client-utils.c
+++ b/src/terminal-client-utils.c
@@ -109,32 +109,35 @@ terminal_client_append_create_instance_options (GVariantBuilder *builder,
*/
void
terminal_client_append_exec_options (GVariantBuilder *builder,
+ gboolean pass_environment,
const char *working_directory,
PassFdElement *fd_array,
gsize fd_array_len,
gboolean shell)
{
- gs_strfreev char **envv;
-
- envv = g_get_environ ();
- envv = g_environ_unsetenv (envv, "COLORTERM");
- envv = g_environ_unsetenv (envv, "COLUMNS");
- envv = g_environ_unsetenv (envv, "DESKTOP_STARTUP_ID");
- envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE_PID");
- envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE");
- envv = g_environ_unsetenv (envv, "GNOME_DESKTOP_ICON");
- envv = g_environ_unsetenv (envv, "LINES");
- envv = g_environ_unsetenv (envv, "NOTIFY_SOCKET");
- envv = g_environ_unsetenv (envv, "PWD");
- envv = g_environ_unsetenv (envv, "TERM");
- envv = g_environ_unsetenv (envv, "VTE_VERSION");
- envv = g_environ_unsetenv (envv, "WINDOWID");
- envv = g_environ_unsetenv (envv, TERMINAL_ENV_SERVICE_NAME);
- envv = g_environ_unsetenv (envv, TERMINAL_ENV_SCREEN);
-
- g_variant_builder_add (builder, "{sv}",
- "environ",
- g_variant_new_bytestring_array ((const char * const *) envv, -1));
+ if (pass_environment) {
+ gs_strfreev char **envv;
+
+ envv = g_get_environ ();
+ envv = g_environ_unsetenv (envv, "COLORTERM");
+ envv = g_environ_unsetenv (envv, "COLUMNS");
+ envv = g_environ_unsetenv (envv, "DESKTOP_STARTUP_ID");
+ envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE_PID");
+ envv = g_environ_unsetenv (envv, "GIO_LAUNCHED_DESKTOP_FILE");
+ envv = g_environ_unsetenv (envv, "GNOME_DESKTOP_ICON");
+ envv = g_environ_unsetenv (envv, "LINES");
+ envv = g_environ_unsetenv (envv, "NOTIFY_SOCKET");
+ envv = g_environ_unsetenv (envv, "PWD");
+ envv = g_environ_unsetenv (envv, "TERM");
+ envv = g_environ_unsetenv (envv, "VTE_VERSION");
+ envv = g_environ_unsetenv (envv, "WINDOWID");
+ envv = g_environ_unsetenv (envv, TERMINAL_ENV_SERVICE_NAME);
+ envv = g_environ_unsetenv (envv, TERMINAL_ENV_SCREEN);
+
+ g_variant_builder_add (builder, "{sv}",
+ "environ",
+ g_variant_new_bytestring_array ((const char * const *) envv, -1));
+ }
if (working_directory)
g_variant_builder_add (builder, "{sv}",
diff --git a/src/terminal-client-utils.h b/src/terminal-client-utils.h
index fc3b9683..0a70637a 100644
--- a/src/terminal-client-utils.h
+++ b/src/terminal-client-utils.h
@@ -41,6 +41,7 @@ typedef struct {
} PassFdElement;
void terminal_client_append_exec_options (GVariantBuilder *builder,
+ gboolean pass_environment,
const char *working_directory,
PassFdElement *fd_array,
gsize fd_array_len,
diff --git a/src/terminal-options.c b/src/terminal-options.c
index 5cc20798..afe45455 100644
--- a/src/terminal-options.c
+++ b/src/terminal-options.c
@@ -1347,6 +1347,15 @@ get_goption_context (TerminalOptions *options)
unsupported_option_callback,
NULL, NULL
},
+ {
+ "no-environment",
+ 0,
+ 0,
+ G_OPTION_ARG_NONE,
+ &options->no_environment,
+ N_("Do not pass the environment"),
+ NULL
+ },
{
"preferences",
0,
diff --git a/src/terminal-options.h b/src/terminal-options.h
index 007a1745..3ac4070e 100644
--- a/src/terminal-options.h
+++ b/src/terminal-options.h
@@ -87,6 +87,7 @@ typedef struct
char **exec_argv;
char *default_profile;
gboolean default_profile_is_id;
+ gboolean no_environment;
gboolean execute;
double zoom;
diff --git a/src/terminal.c b/src/terminal.c
index 8e0aca42..ad975391 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -516,6 +516,7 @@ handle_options (TerminalOptions *options,
gsize fd_array_len = it->fd_array ? it->fd_array->len : 0;
terminal_client_append_exec_options (&builder,
+ !options->no_environment,
it->working_dir ? it->working_dir
: options->default_working_dir,
fd_array, fd_array_len,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]