Bug with refresh in python curses

1.3k views Asked by At

I'm writing a program in curses and sometimes happens that if I leave the program opened and I use other terminal tabs for a while, when I go using the program again it seems like it has refreshed something and something has disappeared... I cannot show pics or screenshots because I haven't understood yet well when and how it happens... Is there a way to prevent or fix this?

1

There are 1 answers

1
Thomas Dickey On

screen.getch reads from stdscr, and if it refreshes (due to any change on the screen), will overwrite boxes. You could change that to box.getch, as I did in scroll page by page or line by line using python curses

The manual page for getch says

If the window is not a pad, and it has been moved or modified since the last call to wrefresh, wrefresh will be called before another character is read.

In your sample program you used

screen.keypad( 1 )

which only applies to reading from the standard screen. If you read from the box window, you should set the keypad flag on that:

box.keypad( 1 )

The manual page for keypad says

The default value for keypad is FALSE

that is, it is the default for each window.

A curses program with multiple windows can choose to read from different windows at different times. There is only one input buffer for each screen, but the side-effect of refreshing the current window makes it simpler to manage updates to the windows. (For complicated window stacking order, you would use the panel library rather than rely upon this side-effect).