
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 howncursesworks. 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 simpleforloop 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 2as 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 usetouchwinas a workaround Method (done usingdialogandcdk).
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!
Usage of Type keyword in Go
How to implement linked list in go
What are the Go language programming software?
How to learn go language from 0 basics
What are the methods to implement operator overloading in Go language?
What are the operators in Go language?
How to open .dat files
CSS scroll bar style