Nick ! <[EMAIL PROTECTED]> wrote: > http://web.cs.mun.ca/~rod/ncurses/ncurses.html#xterm says "The ncurses > library does not catch [the SIGWINCH aka resizing] signal, because it > cannot in general know how you want the screen re-painted". First, is > this really true? When I make my xterms smaller they clip what is
no - given that particular url is a file dating from 1995, it's something that I overlooked in making corrections here: http://invisible-island.net/ncurses/ncurses-intro.html But also note where I link it from: http://invisible-island.net/ncurses/ncurses.faq.html#additional_reading > displayed--is that a function of curses or the xterm? both - xterm sends the signal, and curses receives it. > Second, if true, it explains /what/ is going on--stdscr, only--, but > isn't really satisfactory; it doesn't solve the original poster's bug. > #!/usr/bin/env python > """ > curses_resize.py -> run the program without hooking SIGWINCH > curses_resize.py 1 -> run the program with hooking SIGWINCH > """ > import sys, curses, signal, time > def sigwinch_handler(n, frame): > curses.endwin() > curses.initscr() Actually I'd expect to see curses.refresh() here - but that may be a quirk of the python code. In general, ncurses passes a KEY_RESIZE via the getch() call that the application (such as python) should process. If it's not reading from getch(), ncurses' repainting/resizing won't happen. Also, if you add your own signal handler, ncurses' SIGWINCH catcher won't work. (I'd recommend chaining the signal handlers, but don't know if python supports that ;-). > def main(stdscr): > """just repeatedly redraw a long string to reveal the window > boundaries""" > while 1: > stdscr.insstr(0,0,"abcd"*40) > time.sleep(1) > if __name__=='__main__': > if len(sys.argv)==2 and sys.argv[1]=="1": > signal.signal(signal.SIGWINCH, sigwinch_handler) > curses.wrapper(main) -- Thomas E. Dickey http://invisible-island.net ftp://invisible-island.net -- http://mail.python.org/mailman/listinfo/python-list