python / cpython

The Python programming language
https://www.python.org
Other
62.31k stars 29.93k forks source link

python curses newterm implementation #90092

Open 8aad62bc-0568-48e0-8285-f8dc82dd5510 opened 2 years ago

8aad62bc-0568-48e0-8285-f8dc82dd5510 commented 2 years ago
BPO 45934
Nosy @gvanrossum, @pfmoore, @tjguk, @zware, @serhiy-storchaka, @zooba, @gvanrossum

Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

Show more details

GitHub fields: ```python assignee = 'https://github.com/serhiy-storchaka' closed_at = None created_at = labels = ['type-feature', 'library', '3.11'] title = 'python curses newterm implementation' updated_at = user = 'https://bugs.python.org/draganic1' ``` bugs.python.org fields: ```python activity = actor = 'juliushamilton100' assignee = 'serhiy.storchaka' closed = False closed_date = None closer = None components = ['Library (Lib)'] creation = creator = 'draganic1' dependencies = [] files = [] hgrepos = [] issue_num = 45934 keywords = [] message_count = 8.0 messages = ['407673', '407674', '407724', '407725', '407733', '407768', '407795', '407844'] nosy_count = 9.0 nosy_names = ['gvanrossum', 'paul.moore', 'tim.golden', 'zach.ware', 'serhiy.storchaka', 'steve.dower', 'Guido.van.Rossum', 'draganic1', 'juliushamilton100'] pr_nums = [] priority = 'normal' resolution = None stage = 'needs patch' status = 'open' superseder = None type = 'enhancement' url = 'https://bugs.python.org/issue45934' versions = ['Python 3.11'] ```

gvanrossum commented 2 years ago

Since this is an enhancement, it should only target 3.11.-- --Guido (mobile)

gvanrossum commented 2 years ago

This does not apply to Windows (we don’t support curses there).

68fa6c1e-eaa2-4eff-b1f2-f410adebd0cc commented 2 years ago

I’m trying to patch this bug.

Here are my current working questions:

  1. What is the relationship between an fd (file descriptor) and a terminal? What software / hardware component goes to “fd 0” to receive input from it? Is there a GNU Screen command to receive stdin from “fd n”, fd 3 for example?

  2. Looking at the source code:

def initscr():
    import _curses, curses
    # we call setupterm() here because it raises an error
    # instead of calling exit() in error cases.
    setupterm(term=_os.environ.get("TERM", "unknown"),
              fd=_sys.__stdout__.fileno())
    stdscr = _curses.initscr()
    for key, value in _curses.__dict__.items():
        if key[0:4] == 'ACS_' or key in ('LINES', 'COLS'):
            setattr(curses, key, value)

    return stdscr

(I said in an email I would double post an email I sent but instead I’m posting more specific questions here related to that email. Also, I’m still studying an email Guido sent, so apologies for any redundant questions here.)

Thanks, Julius

68fa6c1e-eaa2-4eff-b1f2-f410adebd0cc commented 2 years ago

I’m trying to patch this bug.

Here are my current working questions:

  1. What is the relationship between an fd (file descriptor) and a terminal? What software / hardware component goes to “fd 0” to receive input from it? Is there a GNU Screen command to receive stdin from “fd n”, fd 3 for example?

  2. Looking at the source code:

def initscr():
import _curses, curses
# we call setupterm() here because it raises an error
# instead of calling exit() in error cases.
setupterm(term=_os.environ.get("TERM", "unknown"),
fd=_sys.__stdout__.fileno())
stdscr = _curses.initscr()
for key, value in _curses.__dict__.items():
if key[0:4] == 'ACS_' or key in ('LINES', 'COLS'):
setattr(curses, key, value)
return stdscr

(I said in an email I would double post an email I sent but instead I’m posting more specific questions here related to that email. Also, I’m still studying an email Guido sent, so apologies for any redundant questions here.)

Thanks, Julius

On Sun 5. Dec 2021 at 00:01, Éric Araujo \report@bugs.python.org\ wrote:

Change by Éric Araujo \merwok@netwok.org\:

---------- stage: -> needs patch versions: -Python 3.10, Python 3.6, Python 3.7, Python 3.8, Python 3.9


Python tracker \report@bugs.python.org\ \https://bugs.python.org/issue45934\


serhiy-storchaka commented 2 years ago

What is it about? The first message is by Guido, but not this message nor the title does not give me any idea what is it about.

gvanrossum commented 2 years ago

Serhiy, this started with a post by Julius to the core-mentorship list. He wants to add newterm(), and found that an issue about that was just created by a different user (draganic1) -- apparently without a comment body, so it appears the first comment is mine (I didn't know that was possible in bpo).

Windows experts are welcome to take themselves off the nosy list.

serhiy-storchaka commented 2 years ago

Thank you Guido for clarification. I have found that post:

https://mail.python.org/archives/list/core-mentorship@python.org/thread/YGSMPKP7G3HO73ISEQZFAWPPGCOA3JYZ/

I agree that it is worth to implement newterm. In particular it would be useful in tests.

68fa6c1e-eaa2-4eff-b1f2-f410adebd0cc commented 2 years ago

I’m currently planning on studying the C code for initscr and newterm so I can really understand how they work.

I’ll post any updates about this soon.

Thanks.