west icon indicating copy to clipboard operation
west copied to clipboard

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

Open marc-hb opened this issue 1 year ago • 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.

marc-hb avatar Apr 18 '23 23:04 marc-hb

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 avatar Apr 18 '23 23:04 marc-hb

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 avatar Apr 18 '23 23:04 marc-hb

Spotted by @mbolivar-nordic:

  • https://lwn.net/Articles/929123/ Textual: a framework for terminal user interfaces

marc-hb avatar Apr 21 '23 19:04 marc-hb