Question

Consider the following code.

import curses
import rlcompleter

def main(stdscr):
    while 1:
        c = stdscr.get_wch()

curses.wrapper(main)

When I run this and resize my terminal, the program fails at the get_wch, saying

Traceback (most recent call last):
  File "foo.py", line 8, in <module>
    curses.wrapper(main)
  File "/usr/lib/python3.3/curses/__init__.py", line 94, in wrapper
    return func(stdscr, *args, **kwds)
  File "foo.py", line 6, in main
    c = stdscr.get_wch()
_curses.error: no input

However, when I remove the line import rlcompleter, a KEY_RESIZE is correctly returned and everything works fine.

What is going on??

Was it helpful?

Solution

I just tried this out, and you're a victim of http://bugs.python.org/issue2675 which is more a readline + curses problem than a Python issue.

In short, curses behavior changes based on the environmental variables LINES and COLUMNS, which readline sets.

If you add

import os

os.unsetenv('LINES')
os.unsetenv('COLUMNS')

Somewhere in there, it will remove the conflict and behave as you expect. If you want to be generous, you might want to save / restore =).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top