[Bug 6640] New: Color mode autodetection incorrect for modern Cygwin/MSYS2 + Command Prompt

mercurial-bugs at mercurial-scm.org mercurial-bugs at mercurial-scm.org
Fri Feb 4 17:53:21 UTC 2022


https://bz.mercurial-scm.org/show_bug.cgi?id=6640

            Bug ID: 6640
           Summary: Color mode autodetection incorrect for modern
                    Cygwin/MSYS2 + Command Prompt
           Product: Mercurial
           Version: stable branch
          Hardware: PC
                OS: Windows
            Status: UNCONFIRMED
          Severity: feature
          Priority: wish
         Component: color
          Assignee: bugzilla at mercurial-scm.org
          Reporter: mhentges at mozilla.com
                CC: mercurial-devel at mercurial-scm.org
    Python Version: ---

(I'm guessing) that, when running on Windows, the color mode should be:
* "win32" if the terminal is Command Prompt (and perhaps Windows Terminal)
* "ansi" if the terminal is TTY-based, like Mintty, Conemu, etc.

The current Windows color mode detection does this by checking $TERM [1].
This used to work because older Cygwin/MSYS used `TERM=cygwin`.
However, modern Cygwin/MSYS2 uses `TERM=xterm-256color` in the Command Prompt
(and just `TERM=xterm` in Mintty).

This causes issues where colored output is mis-formatted.
You can reproduce this by:

1. Install Python 3
2. `py -m pip install mercurial --user`
3. Create a repo and put a changed file in it, do an `hg addremove`
4. Install MSYS2 [2]
5. Start a Command Prompt
6. `C:\msys64\msys2_shell.cmd -no-start -defterm`
7. `cd <path to repo you created`
8. `C:\Users\<User>\AppData\Roaming\Python\Python<version>\Scripts\hg.exe
commit -m "message"`

The "no username supplied" error should have raw ansi sequences on either side
of it.

I'm not sure what the solution is here. You can look for the `$TERM_PROGRAM`
environment variable, but that's not standardized. My Windows-foo is not
sufficiently advanced to have a straightforward recommendation :)

There is a workaround for others affected by this: set the "color.mode" option
to "win32".

[1] https://www.mercurial-scm.org/repo/hg/file/tip/mercurial/color.py#l258
[2] https://www.msys2.org/

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Mercurial-devel mailing list