@@ -258,6 +258,23 @@ def confirm(
258258 return rv
259259
260260
261+ def get_pager_file (color = None ):
262+ """Context manager.
263+
264+ Yields a writable file-like object which can be used as an output pager.
265+
266+ .. versionadded:: 8.2
267+
268+ :param color: controls if the pager supports ANSI colors or not. The
269+ default is autodetection.
270+ """
271+ from ._termui_impl import get_pager_file
272+
273+ color = resolve_color_default (color )
274+
275+ return get_pager_file (color = color )
276+
277+
261278def echo_via_pager (
262279 text_or_generator : cabc .Iterable [str ] | t .Callable [[], cabc .Iterable [str ]] | str ,
263280 color : bool | None = None ,
@@ -273,7 +290,6 @@ def echo_via_pager(
273290 :param color: controls if the pager supports ANSI colors or not. The
274291 default is autodetection.
275292 """
276- color = resolve_color_default (color )
277293
278294 if inspect .isgeneratorfunction (text_or_generator ):
279295 i = t .cast ("t.Callable[[], cabc.Iterable[str]]" , text_or_generator )()
@@ -285,9 +301,9 @@ def echo_via_pager(
285301 # convert every element of i to a text type if necessary
286302 text_generator = (el if isinstance (el , str ) else str (el ) for el in i )
287303
288- from . _termui_impl import pager
289-
290- return pager ( itertools . chain ( text_generator , " \n " ), color )
304+ with get_pager_file ( color = color ) as pager :
305+ for text in itertools . chain ( text_generator , " \n " ):
306+ pager . write ( text )
291307
292308
293309@t .overload
0 commit comments