mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
7c3de76692
This fixes the issue with build output not being colorized on Windows, while the hints messages are colorized. The issue occurred because sys.stdout and sys.stderr get overridden by colorama.init() at runtime, but the default argument output_stream=sys.stdout holds the reference to the"original" sys.stdout. colorama.init() (which, by the way, gets called via a curious chain of imports, via idf_component_tools.manifest and tqdm package) overrides standard streams, on Windows only. The overridden streams contain logic to convert ANSI color codes into Windows Console API calls to colorize the text. Since read_and_write_stream function used the default value of output_stream evaluated at module loading time, it was using the original sys.stdout, not the one overridden by colorama. One extra note is that while this does fix the coloring issue, the solution is a bit fragile, as it relies on one of the following (on Windows): - colorama.init() is called (this can change if idf-component-manager stops importing tqdm) - Sufficiently new version of Windows 10 is used, and ANSI color codes support is enabled in the Registry. |
||
---|---|---|
.. | ||
__init__.py | ||
constants.py | ||
core_ext.py | ||
create_ext.py | ||
debug_ext.py | ||
dfu_ext.py | ||
errors.py | ||
global_options.py | ||
hints.yml | ||
README.md | ||
serial_ext.py | ||
tools.py | ||
uf2_ext.py |
idf.py extensions
Python modules (subdirectories and files) in this directory named [your_extension]_ext
will be loaded as idf.py extensions.
If you want to provide extra extensions just provide ;
separated list of directories with extensions in IDF_EXTRA_ACTIONS_PATH
. Extensions will be loaded in alphanumeric order.
Command line arguments parsing and extension mechanism is implemented on top of Click (versions >=5.0 are supported).
They should define a function action_extensions(base_actions, project_path)
where:
- base_actions - dictionary with actions that are already available for idf.py
- project_path - working dir, may be defaulted to
os.getcwd()
This function have to return a dict with 3 possible keys:
{
# Additional options that will be available from id
"global_options": [{
"names": ["--option-name"],
"help": "Help for option --option-name.",
}],
# List of functions that will have access to full app context, and can mangle with arguments
"global_action_callbacks": [global_callback],
# Additional subcommands for idf.py
"actions": {
"subcommand_name": {
"callback": subcommand_callback,
"help": "Help for subcommand.",
},
},
}
Where function global_callback(ctx, global_args, tasks)
accepts 3 arguments:
- ctx - Click context
- global_args - dictionary of all available global arguments
- tasks - list of Task objects
And subcommand_callback(subcommand_name, ctx, args)
accepts 3 arguments:
- subcommand_name - name of subcommand
- ctx - Click context
- args - list of command's arguments