esp-idf/tools/kconfig_new/menuconfig_wrapper.py

61 lines
1.7 KiB
Python

# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import os
import sys
from typing import Any
from typing import Callable
import menuconfig
if os.name == 'nt':
import curses
def main() -> None:
if os.name == 'nt' and sys.version_info[:2] >= (3, 12):
curses.wrapper = _wrapper # type: ignore
menuconfig._main()
def _wrapper(func: Callable) -> Any:
# Using workaround to address windows-curses bug on Python 3.12
# More info: https://github.com/zephyrproject-rtos/windows-curses/issues/50
# This function is a copy of curses.wrapper with changes commented further in the code
if os.name == 'nt' and sys.version_info[:2] >= (3, 12):
stdscr = None
try:
import _curses
# This crashes on Python 3.12 and needs to be commented out.
# It is not needed for the menuconfig to work, though.
# setupterm(term=_os.environ.get('TERM', 'unknown'),
# fd=_sys.__stdout__.fileno())
stdscr = _curses.initscr()
for key, value in _curses.__dict__.items():
if key[0:4] == 'ACS_' or key in ('LINES', 'COLS'):
setattr(curses, key, value)
curses.noecho()
curses.cbreak()
try:
curses.start_color()
except: # noqa: E722
pass
if stdscr is not None:
stdscr.keypad(True)
func(stdscr)
finally:
if stdscr is not None:
stdscr.keypad(False)
curses.echo()
curses.nocbreak()
return curses.endwin()
else:
return curses.wrapper(func)
if __name__ == '__main__':
main()