google / google/python-fire

Can't show ansi color on windows if use git bash

Abierto
#575 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
28.2k
Forks
1.5k
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Description

When using `fire` in Git Bash on Windows, the `initialize_or_disable` function in the `formatting_windows.py` unnecessarily invokes `colorama.init(wrap=True)` even though Git Bash already supports native ANSI escape sequences. This behavior causes issues, such as double-wrapped output or incorrect handling of ANSI sequences, which can lead to degraded user experience or unexpected output.

## Steps to Reproduce

1. Use Git Bash on a Windows system.

1. Run a script that uses `fire` with formatting enabled.

1. Observe that the output is handled incorrectly due to the invocation of `colorama.init(wrap=True)`.

## Root Cause Analysis

The initialize_or_disable function currently does not differentiate between Git Bash and other Windows environments like `cmd.exe` or `powershell.exe`. Specifically:

- Git Bash natively supports ANSI escape sequences.

- The function does not explicitly check for Git Bash and thus assumes it must handle formatting via `colorama`.

- This leads to `colorama.init(wrap=True)` being invoked unnecessarily, causing redundant processing and potential output issues.

## Proposed Solution

Add an explicit check for Git Bash environments in the `initialize_or_disable` function. This can be achieved by inspecting environment variables such as `MSYSTEM` or `TERM`, which are typically set in Git Bash.

Additionally, provide a configuration option to control whether the formatting_windows functionality is enabled or disabled. This will allow users to explicitly manage how formatting is handled.

## Suggested Changes
Modify `initialize_or_disable` to detect Git Bash:
```python
def initialize_or_disable():
is_git_bash = os.environ.get('MSYSTEM') or os.environ.get('TERM') in ['xterm', 'xterm-256color']
if is_git_bash:
print("Detected Git Bash, skipping colorama.init")
return # Skip colorama initialization for Git Bash

# Existing logic for colorama and ANSI initialization

```
Add a configuration flag to enable or disable the `formatting_windows` logic explicitly. For example:
```python

ENABLE_FORMATTING_WINDOWS = os.environ.get('ENABLE_FORMATTING_WINDOWS', '1') == '1'

if ENABLE_FORMATTING_WINDOWS:
initialize_or_disable()
else:
print("Formatting for Windows is disabled")
```

Please consider implementing the above solution

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.