From ee85a3a5ecf37c013c02fe76058a7487823b72c1 Mon Sep 17 00:00:00 2001 From: Aidr0ne Date: Sat, 4 Jan 2025 14:43:01 +0000 Subject: [PATCH 1/2] Terminal-Fill-Screen-Fix --- consolemenu/console_menu.py | 2 +- consolemenu/menu_component.py | 4 ++++ consolemenu/menu_formatter.py | 14 +++++++++++++- consolemenu/screen.py | 13 +++++++++---- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/consolemenu/console_menu.py b/consolemenu/console_menu.py index 519536b..9e0cf77 100644 --- a/consolemenu/console_menu.py +++ b/consolemenu/console_menu.py @@ -49,7 +49,7 @@ def __init__(self, title=None, subtitle=None, screen=None, formatter=None, self.clear_screen_before_render = clear_screen if formatter is None: - formatter = MenuFormatBuilder() + formatter = MenuFormatBuilder(max_dimension=(screen.screen_width, screen.screen_width)) self.formatter = formatter self.title = title diff --git a/consolemenu/menu_component.py b/consolemenu/menu_component.py index 8b77d8d..fbd46b7 100644 --- a/consolemenu/menu_component.py +++ b/consolemenu/menu_component.py @@ -382,7 +382,11 @@ class MenuFooter(MenuComponent): The menu footer contains the menu bottom, bottom padding verticals, and bottom margin. """ + def SetHeight(self, height): + self.height = height + def generate(self): + self.padding.top += self.height for x in range(0, self.padding.top): yield self.row() yield self.outer_horizontal_border_bottom() diff --git a/consolemenu/menu_formatter.py b/consolemenu/menu_formatter.py index 807c9a5..73fbce8 100644 --- a/consolemenu/menu_formatter.py +++ b/consolemenu/menu_formatter.py @@ -1,5 +1,6 @@ from consolemenu.format.menu_borders import MenuBorderStyle, MenuBorderStyleFactory from consolemenu.format.menu_style import MenuStyle +import os from consolemenu.menu_component import Dimension, MenuHeader, MenuTextSection, MenuItemsSection, MenuFooter, MenuPrompt @@ -11,6 +12,11 @@ class MenuFormatBuilder(object): def __init__(self, max_dimension=None): if max_dimension is None: max_dimension = Dimension(width=80, height=40) + self.__height = 40 + else: + size = os.get_terminal_size() + self.__height = size.lines + max_dimension = Dimension(width=max_dimension[0], height=max_dimension[1]) self.__max_dimension = max_dimension self.__border_style_factory = MenuBorderStyleFactory() self.__header = MenuHeader(menu_style=MenuStyle(), max_dimension=max_dimension) @@ -281,7 +287,13 @@ def format(self, title=None, subtitle=None, prologue_text=None, epilogue_text=No sections.append(self.__footer) sections.append(self.__prompt) for sect in sections: - content += "\n".join(sect.generate()) + if isinstance(sect, MenuFooter): + rows = content.count('\n') + 3 + empty = self.__height - rows + sect.SetHeight(empty) + content += "\n".join(sect.generate()) + else: + content += "\n".join(sect.generate()) # Don't add newline to prompt so input is on same line as prompt if not isinstance(sect, MenuPrompt): content += "\n" diff --git a/consolemenu/screen.py b/consolemenu/screen.py index d9d804d..764e186 100644 --- a/consolemenu/screen.py +++ b/consolemenu/screen.py @@ -3,7 +3,7 @@ import platform import subprocess import sys - +import os class Screen(object): """ @@ -11,9 +11,14 @@ class Screen(object): """ def __init__(self): - # TODO get actual screen size - self.__height = 40 - self.__width = 80 + try: + size = os.get_terminal_size() + self.__height = size.lines + self.__width = size.columns + + except Exception: + self.__height = 40 + self.__width = 80 @property def screen_height(self): From 24d5765e4f452107da1581b05d8aaf63da11d95a Mon Sep 17 00:00:00 2001 From: Aidr0ne Date: Sat, 4 Jan 2025 16:41:04 +0000 Subject: [PATCH 2/2] add refresh function --- consolemenu/screen.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/consolemenu/screen.py b/consolemenu/screen.py index 764e186..6cfbdde 100644 --- a/consolemenu/screen.py +++ b/consolemenu/screen.py @@ -11,6 +11,9 @@ class Screen(object): """ def __init__(self): + self.refresh() + + def refresh(self): try: size = os.get_terminal_size() self.__height = size.lines