On 20Dec2020 15:48, Christopher Barker <python...@gmail.com> wrote:
>On Sun, Dec 20, 2020 at 1:23 PM Cameron Simpson <c...@cskk.id.au> wrote:
>> My anger at programmes which gratuitously clear the screen is large.
>
>There are a LOT of bad things one can do with Python, I don't think we need
>to make something difficult simply because it can be abused.

True.

>One problem is: what does it mean? On a terminal, easy. But in a GUI?
>> Clear the screen (possibly forbidden)? A window? The "main" window?
>> Etc.
>
>It would be meaningless outside of a terminal -- call it `clear_term` if
>you want.

+1

>> Anyway, I think it should be in curses (or be loaded via curses on
>> demand),
>
>That would be great, though I just looked at the 3.9 docs and saw:
>"The Windows version of Python doesn’t include the curses module."

Yeah, Windows.

>So we're pretty much back to square one.

No, for Windows we shell out to its command line unless a Windows person 
knows what to do. We could hardwire the ANSI clear screen sequence as a 
fallback when there's no curses module, that's easy with a try/import.

>I think the idea here is that we want a simple way, out of the box that
>people can use to clear the terminal, that will work on most commonly
>configured systems out of the box, and can be overridden (monkey patched)
>to work in IDEs (e.g. Idle), custom terminal emulators (e.g. iPython
>Qtconsole), etc. We don't want to require a full curses implementation.

Ok. I still think on UNIX we want curses as the preferred choice since 
to accomodates all terminal types. But a fallback assuming ANSI seems 
sensible to me, unless there's a Windows counter example.

Untested:

    cls_bs = None

    def clear_screen():
        if cls_bs is None:
            try:
                import curses
            except ImportError:
                cls_bs=curses.tigetstr('clear')
        print(cls_bs.encode(), end='', flush=True)

>I just tried that on my mac and tigetstr('cl') simply returns None with 
>no effect.

Yeah. 'clear' works though.

>The tutorial seems to indicate there is a clear method available, so I 
>did
>try that, and it does nothing on my Mac with the default terminal app:
>
>def clear_screen():
>    from curses import wrapper
>
>    def clr(stdscr):
>        # Clear screen
>        stdscr.clear()
>    wrapper(clr)
>clear_screen()

Nonono.

That requires a full curses init, "full screen curses mode programme" 
etc.  We just want the terminal escape sequence. setupterm() inits the 
terminal db access, then off we go. As above.

>>is it so bad to use a subprocess?
>>
>> Yes. It is _really slow_,
>
>could it possible be slow enough to matter? not the kind of thing that's in
>a tight loop.

In your imagined use case. Guarenteed one day this will be in a tight 
loop. In a simulation or something.

>depends on external reaources which might not
>> be there,
>
>oh, like the curses lib ;-)

Hahaha. Batteries supplied.

Cheers,
Cameron Simpson <c...@cskk.id.au>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/CTDKM3PHPAWAHXHBVFR3CCMBUNQAAZVY/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to