Tools to help with text mode (i.e. non-GUI) input

Grant Edwards grant.b.edwards at gmail.com
Fri Jan 17 16:09:14 EST 2025


On 2025-01-17, Alan Gauld via Python-list <python-list at python.org> wrote:
> On 15/01/2025 00:41, Keith Thompson via Python-list wrote:
>> Alan Gauld <learn2program at gmail.com> writes:
>>> On 11/01/2025 14:28, Chris Green via Python-list wrote:
>>>> I'm looking for Python packages that can help with text mode input,
>>>
>>> The standard package for this is curses which comes as part
>>> of the standard library on *nix distros.
>> 
>> The thing about curses (which may or may not be a problem) is that, by
>> design, it takes over the whole screen.  If you want to do simpler text
>> manipulations (showing a dismissible message, showing bold text, etc.)
>> without interfering with existing text, curses can't do it, at least not
>> easily.
>
> It's not that difficult to use the terminfo codes directly.

It's easy to do, but it's tricky to do it right.

https://github.com/GrantEdwards/Python-curses-and-terminfo

> [...]
>
> Here is "hello world" in bold...
>
> import curses
> curses.setupterm()
> bold = curses.tigetstr('bold').decode('ascii')
> normal = curses.tigetstr('sgr0').decode('ascii')
>
> print(bold, 'Hello world', normal)

Don't forget to use tparm() to parameterize strings for things like
"move curser".

Once you've parameterized the string (if needed), you've _might_ need
to worry about the stuff in the string that's meant to be interpreted
by tputs/putp:

Quoting man tparm(3)

   All terminfo strings [including the output of tparm] should be
   printed with tputs or putp.

That's becuase terminfo strings can contain escape sequences that are
filterd out and interpreted by tputs/putp. The approach above only
works if you only care about certain terminals, and you know that none
of the terminfo strings you're using have those interal terminfo
escape sequences in them [AFAIK, that's true for the linux console,
xterm and the like, but not for many serial terminals.]

--
Grant




More information about the Python-list mailing list