I am starting to learn curses in Python. I am using Python 3.5 on Mac OS X. When I try to write in the bottom-right corner, the program crashes with the following error:
$ python ex_curses.py [...] File "ex_curses.py", line 19, in do_curses screen.addch(mlines, mcols, 'c') _curses.error: add_wch() returned ERR
The example program is:
import curses def do_curses(screen): curses.noecho() curses.curs_set(0) screen.keypad(1) (line, col) = 12, 0 screen.addstr(line, col, "Hello world!") line += 1 screen.addstr(line, col, "Hello world!", curses.A_REVERSE) screen.addch(0, 0, "c") (mlines, mcols) = screen.getmaxyx() mlines -= 1 mcols -= 1 screen.addch(mlines, mcols, 'c') while True: event = screen.getch() if event == ord("q"): break curses.endwin() if __name__ == "__main__": curses.wrapper(do_curses)
I have a feeling that I’m missing something obvious, but I don’t know what.
That is expected behavior (a quirk) because
addch attempts to wrap to the next line after adding a character. There is a comment in lib_addch.c dealing with this:
/* * The _WRAPPED flag is useful only for telling an application that we've just * wrapped the cursor. We don't do anything with this flag except set it when * wrapping, and clear it whenever we move the cursor. If we try to wrap at * the lower-right corner of a window, we cannot move the cursor (since that * wouldn't be legal). So we return an error (which is what SVr4 does). * Unlike SVr4, we can successfully add a character to the lower-right corner * (Solaris 2.6 does this also, however). */