diff --git a/CHANGELOG.md b/CHANGELOG.md index f62b8a64..6f1941f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Dropped box.get_safe_box function in favor of Box.substitute - Changed default padding in Panel from 0 to (0, 1) https://github.com/willmcgugan/rich/issues/385 - Table with row_styles will extend background color between cells if the box has no vertical dividerhttps://github.com/willmcgugan/rich/issues/383 +- Changed default of fit kwarg in render_group() from False to True - Renamed rich.bar to rich.progress_bar, and Bar class to ProgressBar, rich.bar is now the new solid bar class ### Fixed diff --git a/rich/console.py b/rich/console.py index 2e3afe85..1044b9fa 100644 --- a/rich/console.py +++ b/rich/console.py @@ -245,7 +245,7 @@ class RenderGroup: Args: renderables (Iterable[RenderableType]): An iterable of renderable objects. - + fit (bool, optional): Use the longest constituent renderable as the group's minimum width if ``True``, otherwise expand the group to fit the availabe space. Defaults to True. """ def __init__(self, *renderables: "RenderableType", fit: bool = True) -> None: @@ -271,8 +271,12 @@ class RenderGroup: yield from self.renderables -def render_group(fit: bool = False) -> Callable: - """A decorator that turns an iterable of renderables in to a group.""" +def render_group(fit: bool = True) -> Callable: + """A decorator that turns an iterable of renderables in to a group. + + Args: + fit (bool, optional): Use the longest constituent renderable as the group's minimum width if ``True``, otherwise expand the group to fit the availabe space. Defaults to True. + """ def decorator(method): """Convert a method that returns an iterable of renderables in to a RenderGroup.""" diff --git a/tests/test_console.py b/tests/test_console.py index 0dc58a13..1ff45f19 100644 --- a/tests/test_console.py +++ b/tests/test_console.py @@ -8,7 +8,8 @@ import pytest from rich import errors from rich.color import ColorSystem -from rich.console import CaptureError, Console, ConsoleOptions +from rich.console import CaptureError, Console, ConsoleOptions, render_group +from rich.measure import measure_renderables from rich.pager import SystemPager from rich.panel import Panel from rich.style import Style @@ -377,3 +378,19 @@ def test_out() -> None: console.begin_capture() console.out(*(["foo bar"] * 5), sep=".", end="X") assert console.end_capture() == "foo bar.foo bar.foo bar.foo bar.foo barX" + + +def test_render_group_fit() -> None: + @render_group() + def renderable(): + yield "one" + yield "two" + yield "three" # <- largest width of 5 + yield "four" + + renderables = [renderable() for _ in range(4)] + + console = Console(width=42) + + min_width, _ = measure_renderables(console, renderables, 42) + assert min_width == 5