onepub-dev / dcli

An extensive library and tooling for building console/cli applications and scripts using the Dart programming language.
236 stars 26 forks source link

Unexpected side affect of Ansi.isSupported checking terminal. #149

Open bsutton opened 3 years ago

bsutton commented 3 years ago

The method Ansi.isSupported checks if a ansi escape sequences are supported on the current terminal.

To make this more reliable it now checks if a terminal is attached by calling stdout.isTerminal.

This has worked well.

However there was an unexpected side effect.

If you run'

final list = start('some command', progress: Progress.capture()).toList();
print(list);

The previously the printed list included any ansi coloring. With the new Ansi.isSupported check the output of any colour escape codes is suppressed because there is no terminal attached (we are capturing the output to a list). This is not what I would normally want. I'm think that we change the colour methods so the still output ansi escape sequences even if a terminal isn't attached. This has the down side that we get colours logged to log files. We do have the Ansi.strip() method that strips out colour which can be used as a filter when logging.

Discussion welcomed.