google / google/python-fire

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

Đang mở
#575 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
28.2k
Fork
1.5k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

## 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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.