How should terminal metadata be exposed?
CanadaHonk opened this issue · 2 comments
Terminal metadata idea from this #1 comment.
- Should we have a parent object (eg
CLI.terminal.noColor) or bare in the namespace (egCLI.noColor)? - Functions (eg
CLI.terminal.noColor()) or getters (egCLI.terminal.noColor)? - Interactivity:
- Potential names:
interactive,isInteractive,interactivity,nonInteractive,notInteractive,tty,isTty,isTTY,terminal,isTerminal,inTerminal - Deno used to have a
isatty(...)function, but now is moving toisTerminal.
- Potential names:
- No color:
- Potential names:
noColor,color,colorful,hasColor,shouldColor - We should probably just use
noColoras it is essentially an opt-out preference;colorcould imply the user wants color which could not be true (rather thanNO_COLORstating the user explicitly does not want color). Also, this would then share the name of the environment variable "standard". - Only Deno exposes just this (
Deno.noColor) afaik, other runtimes you have to handle it yourself (eg!!process.env.NO_COLOR).
- Potential names:
Regarding NO_COLOR:
On the opposite side of NO_COLOR is FORCE_COLOR, definitely less known, but respected by some big npm packages, e.g. chalk and supports-color.
I don't think there's described behavior about connecting FORCE_COLOR and NO_COLOR, so this is kind of ambiguous.
I'm definitely against names hasColor or colorful (both imply that terminal can display color).
I don't see having both noColor and forceColor as an issue though.
a boolean flag for if color is supported ignores that some terminals support different amounts of color detail. for example, the npm package supports-color has four levels of color support to determine what set of colors are supported. though, these checks are very heuristics based and standardizing it would probably be a micro-nightmare.