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..6cfbdde 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,17 @@ class Screen(object): """ def __init__(self): - # TODO get actual screen size - self.__height = 40 - self.__width = 80 + self.refresh() + + def refresh(self): + 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):