diff options
| author | Ulf Magnusson <ulfalizer@gmail.com> | 2018-05-03 04:36:19 +0200 |
|---|---|---|
| committer | Ulf Magnusson <ulfalizer@gmail.com> | 2018-05-03 04:36:19 +0200 |
| commit | 5a80c8ad91aa14fb3f24fa42733b59d273885e2f (patch) | |
| tree | 991d1226e30853c5c9975bd208dce994255ffab7 /menuconfig.py | |
| parent | 986512343aaa1606420f9506362d9fbac581a554 (diff) | |
menuconfig: Scroll to show current menu in menu path
Previously, the title of the current menu disappeared off the right edge
of the terminal for long menu paths. Scroll the menu path to the right
if needed to make sure it is always shown.
Diffstat (limited to 'menuconfig.py')
| -rwxr-xr-x | menuconfig.py | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/menuconfig.py b/menuconfig.py index 4f1531c..2dec6c8 100755 --- a/menuconfig.py +++ b/menuconfig.py @@ -756,6 +756,8 @@ def _draw_main(): # This could be optimized to only update the windows that have actually # changed, but keep it simple for now and let curses sort it out. + term_width = stdscr.getmaxyx()[1] + # # Update the top row with the menu path @@ -769,14 +771,26 @@ def _draw_main(): menu = _cur_menu while menu is not _kconf.top_node: - menu_prompts.insert(0, menu.prompt[0]) + menu_prompts.append(menu.prompt[0]) menu = menu.parent - - _safe_addstr(_path_win, 0, 0, "(top menu)") - for prompt in menu_prompts: - _safe_addch(_path_win, " ") + menu_prompts.append("(top menu)") + menu_prompts.reverse() + + # Hack: We can't put ACS_RARROW directly in the string. Temporarily + # represent it with NULL. Maybe using a Unicode character would be better. + menu_path_str = " \0 ".join(menu_prompts) + + # Scroll the menu path to the right if needed to make the current menu's + # title visible + if len(menu_path_str) > term_width: + menu_path_str = menu_path_str[len(menu_path_str) - term_width:] + + # Print the path with the arrows reinserted + split_path = menu_path_str.split("\0") + _safe_addstr(_path_win, split_path[0]) + for s in split_path[1:]: _safe_addch(_path_win, curses.ACS_RARROW) - _safe_addstr(_path_win, " " + prompt) + _safe_addstr(_path_win, s) _path_win.noutrefresh() @@ -794,7 +808,7 @@ def _draw_main(): # Add the 'mainmenu' text as the title, centered at the top _safe_addstr(_top_sep_win, - 0, (stdscr.getmaxyx()[1] - len(_kconf.mainmenu_text))//2, + 0, (term_width - len(_kconf.mainmenu_text))//2, _kconf.mainmenu_text) _top_sep_win.noutrefresh() @@ -838,9 +852,7 @@ def _draw_main(): # Indicate when show-all mode is enabled if _show_all: s = "Show-all mode enabled" - _safe_addstr(_bot_sep_win, - 0, stdscr.getmaxyx()[1] - len(s) - 2, - s) + _safe_addstr(_bot_sep_win, 0, term_width - len(s) - 2, s) _bot_sep_win.noutrefresh() |
