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 howncurses
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 simplefor
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 movewindow 2
, the one in the background doesn't refresh and leaves a trace:
########################## #######┌┌┌┌┌──────┐####### #######│││││......│####### ##abcde│││││......│...#### #######└└└└└──────┘####### ########################## ##########################
When I uncommentedstdscr.erase()
andstdscr.noutrefresh()
I fixed the trace, but of course I lost all the data on the background window, e.g. Text"abcdefghijklmnopq..."
:
##################### #######┌──────┐###### #######│......│###### #######│......│###### #######└──────┘###### ##################### #####################
I tried makingwindow 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 usingncurses
? Thanks!
curses are not directly supported (see thePanellibrary. Otherwise, you must usetouchwin
as a workaround Method (done usingdialog
andcdk
).
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!