GoNCurses Refresh the background window after the foreground window is moved

WBOY
Release: 2024-02-10 13:24:09
forward
650 people have browsed it

GoNCurses 在前台窗口移动后刷新后台窗口

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.

Question content

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:

  • Window 1 with background and printed text (stdscr)
  • Window 2 (swin) is located on window 1 with a different background
  • Move window 2 to window 1

This 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()
Copy after login

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()
Copy after login

Now when I movewindow 2, the one in the background doesn't refresh and leaves a trace:

########################## #######┌┌┌┌┌──────┐####### #######│││││......│####### ##abcde│││││......│...#### #######└└└└└──────┘####### ########################## ##########################
Copy after login

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...":

##################### #######┌──────┐###### #######│......│###### #######│......│###### #######└──────┘###### ##################### #####################
Copy after login

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!

Workaround

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!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!