From: PatR Date: Sat, 5 Jun 2021 23:11:50 +0000 (-0700) Subject: fix #K3357 - curses menu disappears X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0280006d7615d1f877f4c04d58004b8f313e04d5;p=nethack fix #K3357 - curses menu disappears This fixes the disappearing menu, but not curses menu count entry failing to honor backspace/delete. Entering two or more digits to get a "Count:12" message, followed by non-digit which removes that, resulted in the menu for apply/loot in-out container operation vanishing while it was still waiting for a choice. (Typing a choice blindly did work.) The code intended to handle this. I don't understand why refresh() wasn't working. Reordering stuff didn't help until I changed that from refresh() to wrefresh(win). The original Count:123 display was limited to 25 characters and menus to half the main window, so they didn't overlap. I made the count display wider--because it is now also used for 'autodescribe' feedback when moving the cursor around the map--so made something that originally was impossible become possible. One line of the menu does get erased while "Count:" is displayed, but then gets put back by the wrefresh(). --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 947c85f98..33ae2468e 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -754,6 +754,10 @@ curses: for vertical status, line up conditions in columns; usually two but curses: indent items in perm_invent window by one space curses: don't change the terminal's default colors curses: remove unnecessary special handling for dark gray +curses: sometimes entering a count during menu selection caused the menu to + disappear (example was apply/loot in-out container menu with two or + more digits typed followed by non-digit); in-out menu was still active + but no longer displayed macOS: Xcode project was failing to build if the path to the NetHack source tree contained a space; the issue was within some shell script code contained within the project diff --git a/win/curses/cursdial.c b/win/curses/cursdial.c index a2cebc24c..d00a2df88 100644 --- a/win/curses/cursdial.c +++ b/win/curses/cursdial.c @@ -1497,12 +1497,15 @@ menu_get_selections(WINDOW *win, nhmenu *menu, int how) default: if (isdigit(curletter)) { count = curses_get_count(curletter - '0'); - touchwin(win); - refresh(); + /* after count, we know some non-digit is already pending */ curletter = getch(); - if (count > 0) { - count_letter = curletter; - } + count_letter = (count > 0) ? curletter : '\0'; + + /* remove the count wind (erases last line of message wind) */ + curses_count_window(NULL); + /* force redraw of the menu that is receiving the count */ + touchwin(win); + wrefresh(win); } } diff --git a/win/curses/cursmisc.c b/win/curses/cursmisc.c index b65364a58..3e996ed4f 100644 --- a/win/curses/cursmisc.c +++ b/win/curses/cursmisc.c @@ -65,7 +65,7 @@ curses_read_char(void) } #endif - if (counting && !isdigit(ch)) { /* Dismiss count window if necissary */ + if (counting && !isdigit(ch)) { /* dismiss count window if necessary */ curses_count_window(NULL); curses_refresh_nethack_windows(); }