@@ -148,8 +148,9 @@ def __rich_repr__(self) -> rich.repr.Result:
148148class InlineUpdate (CompositorUpdate ):
149149 """A renderable to write an inline update."""
150150
151- def __init__ (self , strips : list [Strip ]) -> None :
151+ def __init__ (self , strips : list [Strip ], clear : bool = False ) -> None :
152152 self .strips = strips
153+ self .clear = clear
153154
154155 def __rich_console__ (
155156 self , console : Console , options : ConsoleOptions
@@ -175,14 +176,15 @@ def render_segments(self, console: Console) -> str:
175176 append (strip .render (console ))
176177 if not last :
177178 append ("\n " )
178- append ("\n \x1b [J" ) # Clear down
179+ if self .clear :
180+ append ("\n \x1b [J" ) # Clear down
179181 if len (self .strips ) > 1 :
180- append (
181- f"\x1b [{ len (self .strips )} A\r "
182- ) # Move cursor back to original position
182+ back_lines = len (self .strips ) if self .clear else len (self .strips ) - 1
183+ append (f"\x1b [{ back_lines } A\r " ) # Move cursor back to original position
183184 else :
184185 append ("\r " )
185186 append ("\x1b [6n" ) # Query new cursor position
187+
186188 return "" .join (sequences )
187189
188190
@@ -336,6 +338,9 @@ def __init__(self) -> None:
336338 # Mapping of line numbers on to lists of widget and regions
337339 self ._layers_visible : list [list [tuple [Widget , Region , Region ]]] | None = None
338340
341+ # Size of previous inline update
342+ self ._previous_inline_height : int | None = None
343+
339344 @classmethod
340345 def _regions_to_spans (
341346 cls , regions : Iterable [Region ]
@@ -1030,7 +1035,13 @@ def render_inline(
10301035 A renderable.
10311036 """
10321037 visible_screen_stack .set ([] if screen_stack is None else screen_stack )
1033- return InlineUpdate (self .render_strips (size ))
1038+ strips = self .render_strips (size )
1039+ clear = (
1040+ self ._previous_inline_height is not None
1041+ and len (strips ) < self ._previous_inline_height
1042+ )
1043+ self ._previous_inline_height = len (strips )
1044+ return InlineUpdate (strips , clear = clear )
10341045
10351046 def render_full_update (self ) -> LayoutUpdate :
10361047 """Render a full update.
0 commit comments