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/