@@ -425,6 +425,16 @@ def line(self, count: int = 1) -> None:
425425 self ._buffer .append (Segment ("\n " * count ))
426426 self ._check_buffer ()
427427
428+ def clear (self , home : bool = True ) -> None :
429+ """Clear the screen.
430+
431+ Args:
432+ home (bool, optional): Also move the cursor to 'home' position. Defaults to True.
433+ """
434+ if self .is_terminal :
435+ self ._check_buffer ()
436+ self .file .write ("\033 [2J\033 [H" if home else "\033 [2J" )
437+
428438 def show_cursor (self , show : bool = True ) -> None :
429439 """Show or hide the cursor.
430440
@@ -436,7 +446,7 @@ def show_cursor(self, show: bool = True) -> None:
436446 self .file .write ("\033 [?25h" if show else "\033 [?25l" )
437447
438448 def _render (
439- self , renderable : RenderableType , options : Optional [ ConsoleOptions ] ,
449+ self , renderable : RenderableType , options : ConsoleOptions ,
440450 ) -> Iterable [Segment ]:
441451 """Render an object in to an iterable of `Segment` instances.
442452
@@ -446,17 +456,16 @@ def _render(
446456 Args:
447457 renderable (RenderableType): An object supporting the console protocol, or
448458 an object that may be converted to a string.
449- options (ConsoleOptions, optional ): An options objects. Defaults to None.
459+ options (ConsoleOptions): An options objects. Defaults to None.
450460
451461 Returns:
452462 Iterable[Segment]: An iterable of segments that may be rendered.
453463 """
454464 render_iterable : RenderResult
455- render_options = options or self .options
456465 if isinstance (renderable , ConsoleRenderable ):
457- render_iterable = renderable .__console__ (self , render_options )
466+ render_iterable = renderable .__console__ (self , options )
458467 elif isinstance (renderable , str ):
459- yield from self .render (self .render_str (renderable ), render_options )
468+ yield from self ._render (self .render_str (renderable ), options )
460469 return
461470 else :
462471 raise errors .NotRenderableError (
@@ -474,7 +483,7 @@ def _render(
474483 if isinstance (render_output , Segment ):
475484 yield render_output
476485 else :
477- yield from self .render (render_output , render_options )
486+ yield from self ._render (render_output , options )
478487
479488 def render (
480489 self , renderable : RenderableType , options : Optional [ConsoleOptions ] = None
@@ -969,9 +978,10 @@ def escape(text: str) -> str:
969978 text = escape (text )
970979 if style :
971980 rule = style .get_html_style (_theme )
972- append (f'<span style="{ rule } ">{ text } </span>' if rule else text )
973- else :
974- append (text )
981+ text = f'<span style="{ rule } ">{ text } </span>' if rule else text
982+ if style .link :
983+ text = f'<a href="{ style .link } ">{ text } </a>'
984+ append (text )
975985 else :
976986 styles : Dict [str , int ] = {}
977987 for text , style , _ in Segment .filter_control (
@@ -982,11 +992,10 @@ def escape(text: str) -> str:
982992 rule = style .get_html_style (_theme )
983993 if rule :
984994 style_number = styles .setdefault (rule , len (styles ) + 1 )
985- append (f'<span class="r{ style_number } ">{ text } </span>' )
986- else :
987- append (text )
988- else :
989- append (text )
995+ text = f'<span class="r{ style_number } ">{ text } </span>'
996+ if style .link :
997+ text = f'<a href="{ style .link } ">{ text } </a>'
998+ append (text )
990999 stylesheet_rules : List [str ] = []
9911000 stylesheet_append = stylesheet_rules .append
9921001 for style_rule , style_number in styles .items ():
0 commit comments