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).