# std: rework TTY detection and printing · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/ffcbd48a1220ce6d652ee762001d88baa385de49)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: ffcbd48a1220ce6d652ee762001d88baa385de49

Requested commit: ffcbd48a1220ce6d652ee762001d88baa385de49

Commit: ffcbd48a1220ce6d652ee762001d88baa385de49

Tree: e1ea279b4cd0b8991df04d8a799589f72dbffd86

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
std: rework TTY detection and printing

This commit sketches an idea for how to deal with detection of file
streams as being terminals.

When a File stream is a terminal, writes through the stream should have
their escapes stripped unless the programmer explicitly enables terminal
escapes. Furthermore, the programmer needs a convenient API for
intentionally outputting escapes into the stream. In particular it
should be possible to set colors that are silently discarded when the
stream is not a terminal.

This commit makes `Io.File.Writer` track the terminal mode in the
already-existing `mode` field, making it the appropriate place to
implement escape stripping.

`Io.lockStderrWriter` returns a `*Io.File.Writer` with terminal
detection already done by default. This is a higher-level application
layer stream for writing to stderr.

Meanwhile, `std.debug.lockStderrWriter` also returns a `*Io.File.Writer`
but a lower-level one that is hard-coded to use a static single-threaded
`std.Io.Threaded` instance. This is the same instance that is used for
collecting debug information and iterating the unwind info.

```

## Parents

- [78d262d96ee6200c7a6bc0a41fe536d263c24d92](https://git.cafe/gitcafe/zig/commit/78d262d96ee6200c7a6bc0a41fe536d263c24d92?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/ffcbd48a1220ce6d652ee762001d88baa385de49?format=markdown)
