# Environment

Source: https://libtmux.org/en/py/stable/topics/environment/

> Locate tmux objects from process variables and manage the environment inherited by new panes.

tmux exposes two environment APIs. Process variables such as [`TMUX`](<https://libtmux.org/en/py/stable/reference/libtmux-_internal-env-tmux/>) and
[`TMUX_PANE`](<https://libtmux.org/en/py/stable/reference/libtmux-_internal-env-tmux_pane/>) let code inside a pane identify its server and pane. The server also
stores variables through [`set-environment`](https://libtmux.org/en/tmux/latest/manual/set-environment/) and [`show-environment`](https://libtmux.org/en/tmux/latest/manual/show-environment/) for new
processes to inherit. Like the tables in [Options and
hooks](https://libtmux.org/en/py/stable/topics/options-and-hooks/), this persistent store has explicit scopes.

## Locating yourself from inside a pane

Inside a pane, [`TMUX`](<https://libtmux.org/en/py/stable/reference/libtmux-_internal-env-tmux/>) contains `<socket path>,<server pid>,<session id>`, and
[`TMUX_PANE`](<https://libtmux.org/en/py/stable/reference/libtmux-_internal-env-tmux_pane/>) contains the pane ID, such as `%1`. Use these variables to locate
the current tmux objects. Select the object your operation needs:

**Server:** [`Server.from_env()`](<https://libtmux.org/en/py/stable/reference/libtmux-server-from_env/>)

**Session:** [`Session.from_env()`](<https://libtmux.org/en/py/stable/reference/libtmux-session-from_env/>)

**Window:** [`Window.from_env()`](<https://libtmux.org/en/py/stable/reference/libtmux-window-from_env/>)

**Pane:** [`Pane.from_env()`](<https://libtmux.org/en/py/stable/reference/libtmux-pane-from_env/>)

### Examples

```python
Pane.from_env().pane_id
Window.from_env().window_id
Session.from_env().session_id
Server.from_env().sessions
```

Environment lookup requires valid tmux targeting variables. If your process
can run outside tmux, handle that case before using the result.

[`NotInsideTmux`](<https://libtmux.org/en/py/stable/reference/libtmux-exc-notinsidetmux/>) reports a missing or invalid tmux environment.

## tmux's own environment variable store

Like [Options and hooks](https://libtmux.org/en/py/stable/topics/options-and-hooks/),
tmux's persistent environment store has global and per-session scopes. It is
read with [`show-environment`](https://libtmux.org/en/tmux/latest/manual/show-environment/) and updated with [`set-environment`](https://libtmux.org/en/tmux/latest/manual/set-environment/). Newly spawned
processes inherit it; existing processes retain their own environments.

**Set:** [`server.set_environment(name, value)`](<https://libtmux.org/en/py/stable/reference/libtmux-server-set_environment/>), [`session.set_environment(...)`](<https://libtmux.org/en/py/stable/reference/libtmux-session-set_environment/>)

**Read all:** [`server.show_environment()`](<https://libtmux.org/en/py/stable/reference/libtmux-server-show_environment/>), [`session.show_environment()`](<https://libtmux.org/en/py/stable/reference/libtmux-session-show_environment/>)

**Unset:** [`server.unset_environment(name)`](<https://libtmux.org/en/py/stable/reference/libtmux-server-unset_environment/>). See below for `.remove_environment()`.

### Examples

```python
server.set_environment("EDITOR", "vim")     # global
session.set_environment("EDITOR", "hx")     # this session only
session.show_environment()
```

[`set-environment`](https://libtmux.org/en/tmux/latest/manual/set-environment/) writes a value. Its `-u` flag removes the entry, while `-r`
marks the variable for exclusion from new processes, including values tmux
inherited at startup. The listing retains an excluded variable as `-NAME`.

Use `unset_environment` for `-u`, or `remove_environment` for `-r`.
