Skip to content

Five curses documentation statements contradict the implementation #157140

Open

Description

@fedonman

Documentation

Five statements in Doc/library/curses.rst describe behaviour the module does not have.

documented says actually
halfdelay() "raise an exception if nothing has been typed" getch() returns -1
termname() "truncated to 14 characters" returns the full name
window.scroll() "no effect unless it has been enabled ... with scrollok" raises curses.error
window.insnstr() "If n is zero or negative, the entire string is inserted" zero inserts nothing
window.insch() "The cursor position does not change" the (y, x) form moves it
$ TERM=screen.xterm-256color ./python repro.py; cat out.txt
halfdelay(2); getch()   -> -1
termname()              -> b'screen.xterm-256color'
scroll() no scrollok    -> curses.error: wscrl() (called by scroll()) returned ERR
insnstr('ABC', 0)       -> '....'
insch(3, 5, ch); getyx  -> (3, 5)
repro.py
import curses

out = []
stdscr = curses.initscr()
try:
    curses.cbreak()
    curses.halfdelay(2)
    out.append(f"halfdelay(2); getch()   -> {stdscr.getch()!r}")
    curses.cbreak()
    out.append(f"termname()              -> {curses.termname()!r}")
    w = curses.newwin(5, 20, 0, 0)
    w.scrollok(False)
    try:
        w.scroll(1)
        out.append("scroll() no scrollok    -> returned None")
    except curses.error as e:
        out.append(f"scroll() no scrollok    -> curses.error: {e}")
    w.addstr(2, 0, "....")
    w.move(2, 0)
    w.insnstr("ABC", 0)
    out.append(f"insnstr('ABC', 0)       -> {w.instr(2, 0, 4).decode()!r}")
    w.insch(3, 5, ord('x'))
    out.append(f"insch(3, 5, ch); getyx  -> {w.getyx()}")
finally:
    curses.endwin()
open("out.txt", "w").write("\n".join(out) + "\n")

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions