//! How output reaches a person or a pipe. //! //! Eight modules, one subject: what atgc prints, on which stream, and how much //! of it. They are grouped because a command that gets one of them wrong //! usually got the others wrong too — a note on stdout, an escape sequence in //! a file, a prompt in a pipe are the same mistake seen three ways. //! //! - [`mod@say`] — the stderr channel every note, warning and step goes //! through, with the levels and topics that let a caller turn it down. //! - [`mod@jsonout`] — `--json`: one document on stdout, everything else on //! stderr, no decoration. //! - [`mod@hyperlink`] — OSC 8, and the check for whether the terminal on the //! other end can render it. //! - [`mod@noinput`] — whether anybody is there to answer, decided once. //! - [`mod@style`] — the six styles anything painted is painted in. //! - [`mod@checks`] — the rows a report is made of, for the two commands that //! answer by reporting rather than by acting. //! - [`mod@column`] — fitting a value into a fixed-width column: the cut, the //! padding, and the cell count both of them are measured against. //! - [`mod@text`] — somebody else's record text, with the characters a //! terminal *acts on* taken out of it before it is printed at one. //! //! What is *not* here is the logging, which writes files rather than streams, //! and [`crate::help`], which renders the root command's own help. See //! [Module layout](crate::docs::module_layout). pub(crate) mod body; pub(crate) mod checks; pub(crate) mod column; pub(crate) mod hyperlink; pub(crate) mod jsonout; pub(crate) mod noinput; pub(crate) mod say; pub(crate) mod style; pub(crate) mod text;