Skip to content

Commit

Permalink
Merge branch 'monitor_win_color-v5.1' into 'release/v5.1'
Browse files Browse the repository at this point in the history
bug(idf_monitor): fix color on windows with hints (v5.1)

See merge request espressif/esp-idf!23346
  • Loading branch information
dobairoland committed Apr 24, 2023
2 parents 4e73cb7 + 49718b2 commit 83a682c
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 8 deletions.
2 changes: 1 addition & 1 deletion components/console/linenoise/linenoise.c
Original file line number Diff line number Diff line change
Expand Up @@ -1046,7 +1046,7 @@ int linenoiseProbe(void) {
flushWrite();

/* Try to read response */
int timeout_ms = 300;
int timeout_ms = 500;
const int retry_ms = 10;
size_t read_bytes = 0;
while (timeout_ms > 0 && read_bytes < 4) { // response is ESC[0n or ESC[3n
Expand Down
2 changes: 1 addition & 1 deletion docs/en/api-guides/tools/idf-py.rst
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ or partition table as applicable.
Hints on how to resolve errors
==============================

``idf.py`` will try to suggest hints on how to resolve errors. It works with a database of hints stored in :idf_file:`tools/idf_py_actions/hints.yml` and the hints will be printed if a match is found for the given error. The monitor and menuconfig targets are not supported at the moment by automatic hints on resolving errors.
``idf.py`` will try to suggest hints on how to resolve errors. It works with a database of hints stored in :idf_file:`tools/idf_py_actions/hints.yml` and the hints will be printed if a match is found for the given error. The menuconfig target is not supported at the moment by automatic hints on resolving errors.

The ``--no-hints`` argument of ``idf.py`` can be used to turn the hints off in case they are not desired.

Expand Down
6 changes: 3 additions & 3 deletions tools/idf_py_actions/serial_ext.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0

import json
Expand Down Expand Up @@ -156,14 +156,14 @@ def monitor(action: str, ctx: click.core.Context, args: PropertyDict, print_filt

idf_py = [PYTHON] + _get_commandline_options(ctx) # commands to re-run idf.py
monitor_args += ['-m', ' '.join("'%s'" % a for a in idf_py)]
hints = False # Temporarily disabled because of https://github.com/espressif/esp-idf/issues/9610
hints = not args.no_hints

# Temporally ignore SIGINT, which is used in idf_monitor to spawn gdb.
old_handler = signal.getsignal(signal.SIGINT)
signal.signal(signal.SIGINT, signal.SIG_IGN)

try:
RunTool('idf_monitor', monitor_args, args.project_dir, build_dir=args.build_dir, hints=hints, interactive=True)()
RunTool('idf_monitor', monitor_args, args.project_dir, build_dir=args.build_dir, hints=hints, interactive=True, convert_output=True)()
finally:
signal.signal(signal.SIGINT, old_handler)

Expand Down
11 changes: 8 additions & 3 deletions tools/idf_py_actions/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import click
import yaml
from esp_idf_monitor import get_ansi_converter
from idf_py_actions.errors import NoSerialPortFoundError

from .constants import GENERATORS
Expand Down Expand Up @@ -193,7 +194,7 @@ def fit_text_in_terminal(out: str) -> str:

class RunTool:
def __init__(self, tool_name: str, args: List, cwd: str, env: Dict=None, custom_error_handler: FunctionType=None, build_dir: str=None,
hints: bool=True, force_progression: bool=False, interactive: bool=False) -> None:
hints: bool=True, force_progression: bool=False, interactive: bool=False, convert_output: bool=False) -> None:
self.tool_name = tool_name
self.args = args
self.cwd = cwd
Expand All @@ -204,6 +205,7 @@ def __init__(self, tool_name: str, args: List, cwd: str, env: Dict=None, custom_
self.hints = hints
self.force_progression = force_progression
self.interactive = interactive
self.convert_output = convert_output

def __call__(self) -> None:
def quote_arg(arg: str) -> str:
Expand Down Expand Up @@ -303,6 +305,9 @@ async def read_interactive_stream() -> Optional[str]:
# and still can not decode it we can just ignore some bytes
return buffer.decode(errors='ignore')

# use ANSI color converter for Monitor on Windows
output_converter = get_ansi_converter(output_stream) if self.convert_output else output_stream

try:
with open(output_filename, 'w', encoding='utf8') as output_file:
while True:
Expand All @@ -325,8 +330,8 @@ async def read_interactive_stream() -> Optional[str]:
# print output in progression way but only the progression related (that started with '[') and if verbose flag is not set
print_progression(output)
else:
output_stream.write(output)
output_stream.flush()
output_converter.write(output)
output_converter.flush()
except (RuntimeError, EnvironmentError) as e:
yellow_print('WARNING: The exception {} was raised and we can\'t capture all your {} and '
'hints on how to resolve errors can be not accurate.'.format(e, output_stream.name.strip('<>')))
Expand Down

0 comments on commit 83a682c

Please sign in to comment.