zephyrproject-rtos/west

Add west --color=always and west config color=always

marc-hb opened this issue · 3 comments

Git has an (somewhat inconsistent) set of "color = always" options to override the automated terminal detection. Demo of one of the (too many) options:

git diff                            # colored           :-)
git diff                | less      # not colored       :-(
git diff --color=always | less  -R  # colored again!    :-(

It would nice for west to offer the same feature.

While rarer, color=never is sometimes needed too. For instance some CI engines try hard to pretend they are terminals to capture colors but then can fail to display them for some reason.

Originally posted by @marc-hb in #649 (comment)

In west, colorama handles terminal detection. The following and BARELY TESTED hack seems equivalent to color=always

--- a/src/west/app/main.py
+++ b/src/west/app/main.py
@@ -895,7 +895,7 @@ def main(argv=None):
 
     # Makes ANSI color escapes work on Windows, and strips them when
     # stdout/stderr isn't a terminal
-    colorama.init()
+    colorama.init(strip=False)
 
     # Create the WestApp instance and let it run.
     app = WestApp()
west diff | less -R # color!
west diff | less    # as expected, color mojikabe :-(

An interesting question design is: when git and west settings conflict, which one wins?

git config color.ui never
west config color always

west diff | less -R # color or not?

To make things even more interesting, git has not just one color.ui setting but also another color.status and who knows what else.

Spotted by @mbolivar-nordic: