slave: unset TERM_PROGRAM{,_VERSION}

Foot’s policy is to not set environment variables that identifies
it (except the well-known and established `TERM` variable).

We encourage applications to use terminfo to determine capabilities,
or terminal queries, when available. Or, at least use terminal queries
to detect the terminal and its version.

Setting environment variables is a bad idea since they are inherited
by all applications started by the terminal (which is the whole
point). But, this includes other terminal emulators, making it very
possible a terminal emulator gets mis-detected just because it was
started from another terminal.

Since there are a couple of terminal emulators that _do_ set
TERM_PROGRAM and TERM_PROGRAM_VERSION, unset these environment
variables to avoid being misdetected.

Closes #1349
This commit is contained in:
Daniel Eklöf 2023-05-12 14:55:55 +02:00
parent d2f81443f1
commit a2f765b72a
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
5 changed files with 4 additions and 27 deletions

View file

@ -21,7 +21,6 @@
#include "macros.h"
#include "terminal.h"
#include "tokenize.h"
#include "version.h"
#include "xmalloc.h"
extern char **environ;
@ -352,11 +351,12 @@ slave_spawn(int ptmx, int argc, const char *cwd, char *const *argv,
}
setenv("TERM", term_env, 1);
setenv("TERM_PROGRAM", "foot", 1);
setenv("TERM_PROGRAM_VERSION", FOOT_VERSION_SHORT, 1);
setenv("COLORTERM", "truecolor", 1);
setenv("PWD", cwd, 1);
unsetenv("TERM_PROGRAM");
unsetenv("TERM_PROGRAM_VERSION");
#if defined(FOOT_TERMINFO_PATH)
setenv("TERMINFO", FOOT_TERMINFO_PATH, 1);
#endif