Home >Backend Development >Golang >GoNCurses Refresh the background window after the foreground window is moved
php Editor Banana today introduces you to an interesting and practical technique, which is to use the GoNCurses library to refresh the background window after the front window is moved. GoNCurses is a ncurses library based on the Go language that can create graphical interfaces in the terminal. However, when we move the foreground window, the background window does not automatically refresh, which brings some inconvenience to our operations. By using the refresh method provided by GoNCurses, we can solve this problem and allow the background window to automatically refresh after the foreground window is moved to improve the user experience. Next, let’s take a closer look at how to implement this technique.
I'm trying to understand how ncurses
works. Here's an example of what I'm trying to understand and make it work.
First is the idea:
stdscr
)swin
) is located on window 1 with a different backgroundThis is the setting:
stdscr, _ := gc.init() defer gc.end() gc.echo(false) gc.cursor(0) gc.cbreak(true) stdscr.setbackground('#') stdscr.moveprint(12, 15, "abcdefghijklmnopq...") stdscr.noutrefresh() y, x := 10, 20 swin, _ := gc.newwindow(4, 8, y, x) swin.keypad(true) swin.setbackground('.') swin.box(0, 0) swin.noutrefresh() gc.update()
There is also a very simple for
loop that will help move the foreground window:
main: for { // stdscr.erase() // stdscr.noutrefresh() swin.movewindow(y, x) swin.noutrefresh() gc.update() switch swin.getchar() { case gc.key_right: x++ case gc.key_down: y++ case 'q': break main } } swin.delete() stdscr.delete()
Now when I move window 2
, the one in the background doesn't refresh and leaves a trace:
########################## #######┌┌┌┌┌──────┐####### #######│││││......│####### ##abcde│││││......│...#### #######└└└└└──────┘####### ########################## ##########################
When I uncommented stdscr.erase()
and stdscr.noutrefresh()
I fixed the trace, but of course I lost all the data on the background window, e.g. Text"abcdefghijklmnopq..."
: p>
##################### #######┌──────┐###### #######│......│###### #######│......│###### #######└──────┘###### ##################### #####################
I tried making window 2
as a child window of the main window, but without success. How can I solve/deal with this problem? How is overlapping windows typically managed using ncurses
?
Thanks!
curses are not directly supported (see the Panel library. Otherwise, you must use touchwin
as a workaround Method (done using dialog
and cdk
).
The above is the detailed content of GoNCurses Refresh the background window after the foreground window is moved. For more information, please follow other related articles on the PHP Chinese website!