zephyrproject-rtos / west

West, Zephyr's meta-tool
https://docs.zephyrproject.org/latest/guides/west/index.html
Apache License 2.0
231 stars 122 forks source link

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

Open marc-hb opened 1 year ago

marc-hb commented 1 year ago

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.

marc-hb commented 1 year ago

_Originally posted by @marc-hb in https://github.com/zephyrproject-rtos/west/pull/649#discussion_r1169274807_

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 :-(
marc-hb commented 1 year ago

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.

marc-hb commented 1 year ago

Spotted by @mbolivar-nordic: