Add a way to mark environment variables as "hidden" so they can be used

by tmux but are not passed into the environment of new panes.
This commit is contained in:
nicm 2020-03-31 17:14:40 +00:00
parent e221ef203c
commit 38f1546a66
2 changed files with 30 additions and 5 deletions

26
tmux.1
View File

@ -565,6 +565,18 @@ Environment variables may be set by using the syntax
for example
.Ql HOME=/home/user .
Variables set during parsing are added to the global environment.
A hidden variable may be set with
.Ql %hidden ,
for example:
.Bd -literal -offset indent
%hidden MYVAR=42
.Ed
.Pp
Hidden variables are not passed to the environment of processes created
by tmux.
See the
.Sx GLOBAL AND SESSION ENVIRONMENT
section.
.Pp
Commands may be parsed conditionally by surrounding them with
.Ql %if ,
@ -4711,10 +4723,16 @@ from inside, and the
variable with the correct terminal setting of
.Ql screen .
.Pp
Variables in both session and global environments may be marked as hidden.
Hidden variables are not passed into the environment of new processes and
instead can only be used by tmux itself (for example in formats, see the
.Sx FORMATS
section).
.Pp
Commands to alter and view the environment are:
.Bl -tag -width Ds
.It Xo Ic set-environment
.Op Fl gru
.Op Fl hgru
.Op Fl t Ar target-session
.Ar name Op Ar value
.Xc
@ -4731,8 +4749,10 @@ flag unsets a variable.
.Fl r
indicates the variable is to be removed from the environment before starting a
new process.
.Fl h
marks the variable as hidden.
.It Xo Ic show-environment
.Op Fl gs
.Op Fl hgs
.Op Fl t Ar target-session
.Op Ar variable
.Xc
@ -4749,6 +4769,8 @@ Variables removed from the environment are prefixed with
If
.Fl s
is used, the output is formatted as a set of Bourne shell commands.
.Fl h
shows hidden variables (omitted by default).
.El
.Sh STATUS LINE
.Nm

9
tmux.h
View File

@ -1048,6 +1048,9 @@ struct environ_entry {
char *name;
char *value;
int flags;
#define ENVIRON_HIDDEN 0x1
RB_ENTRY(environ_entry) entry;
};
@ -1957,10 +1960,10 @@ struct environ_entry *environ_first(struct environ *);
struct environ_entry *environ_next(struct environ_entry *);
void environ_copy(struct environ *, struct environ *);
struct environ_entry *environ_find(struct environ *, const char *);
void printflike(3, 4) environ_set(struct environ *, const char *, const char *,
...);
void printflike(4, 5) environ_set(struct environ *, const char *, int,
const char *, ...);
void environ_clear(struct environ *, const char *);
void environ_put(struct environ *, const char *);
void environ_put(struct environ *, const char *, int);
void environ_unset(struct environ *, const char *);
void environ_update(struct options *, struct environ *, struct environ *);
void environ_push(struct environ *);