]> granicus.if.org Git - nethack/commitdiff
curses followup
authorPatR <rankin@nethack.org>
Sat, 18 May 2019 15:12:43 +0000 (08:12 -0700)
committerPatR <rankin@nethack.org>
Sat, 18 May 2019 15:12:43 +0000 (08:12 -0700)
Some prompts were being overwritten by the message that followed.

And clear_nhwindow(WIN_MESSAGE) gets called for just about every
keystroke so try to reduce the overhead I unwittingly added.  The
"scroll up one line earlier than the next message" mentioned in
the prior commit is much more obvious that I realized and prompt
erasure might need to be redone.

win/curses/cursmesg.c

index f9a8468d68b54a3d93106fed2d1ff1f59c3ddf5c..a32b6824bf6e9cb12430682d690e7d46603fcc01 100644 (file)
@@ -398,15 +398,27 @@ curses_count_window(const char *count_text)
 
     /* if most recent message (probably prompt leading to this instance of
        counting window) is going to be covered up, scroll mesgs up a line */
-    if (!counting && my + 1 >= border + messageh) {
+    if (!counting && my >= border + (messageh - 1)) {
         scroll_window(MESSAGE_WIN);
-        /* last position within the message window */
-        my = border + (messageh - 1) - 1;
-        mx = border;
+        if (messageh > 1) {
+            /* handling for next message will behave as if we're currently
+               positioned at the end of next to last line of message window */
+            my = border + (messageh - 1) - 1;
+            mx = border + (messagew - 1); /* (0 + 80 - 1) or (1 + 78 - 1) */
+        } else {
+            /* for a one-line window, use beginning of only line instead */
+            my = mx = border; /* 0 or 1 */
+        }
         /* wmove(curses_get_nhwin(MESSAGE_WIN), my, mx); -- not needed */
     }
-    counting = TRUE;
+    /* in case we're being called from clear_nhwindow(MESSAGE_WIN)
+       which gets called for every command keystroke; it sends an
+       empty string to get the scroll-up-one-line effect above and
+       we want to avoid the curses overhead for the operations below... */
+    if (!*count_text)
+        return;
 
+    counting = TRUE;
 #ifdef PDCURSES
     if (countwin)
         curses_destroy_win(countwin), countwin = NULL;