]> granicus.if.org Git - nethack/commitdiff
curses message window
authorPatR <rankin@nethack.org>
Tue, 28 May 2019 08:52:37 +0000 (01:52 -0700)
committerPatR <rankin@nethack.org>
Tue, 28 May 2019 08:52:37 +0000 (01:52 -0700)
Fix a 'FIXME': don't follow a message with two spaces in anticipation
of combining with the next one, precede the next one with two spaces
when they're being combined.  Keeps nethack's message window <mx,my>
coordinates in sync with curses' internal coordinates.

win/curses/cursmesg.c

index 13c3109ba9135517c295bdb073d9f89ab93496a0..e006bd76f670b205adefda96ce33c36135993ed6 100644 (file)
@@ -96,12 +96,15 @@ curses_message_win_puts(const char *message, boolean recursed)
         mesg_add_line(message);
     }
 
-    linespace = width - 3 - (mx - border_space);
+    /* -2: room for trailing ">>" (if More>> is needed) or leading "  "
+       (if combining this message with preceding one) */
+    linespace = (width - 1) - 2 - (mx - border_space);
 
     if (linespace < message_length) {
         if (my - border_space >= height - 1) {
             /* bottom of message win */
-            if (++turn_lines >= height) { /* || height == 1) */
+            if (++turn_lines > height
+                || (turn_lines == height && mx > border_space)) {
                 /* Pause until key is hit - Esc suppresses any further
                    messages that turn */
                 if (curses_more() == '\033') {
@@ -119,6 +122,13 @@ curses_message_win_puts(const char *message, boolean recursed)
                 ++turn_lines;
             }
         }
+    } else { /* don't need to move to next line */
+        /* if we aren't at the start of the line, we're combining multiple
+           messages on one line; use 2-space separation */
+        if (mx > border_space) {
+            waddstr(win, "  ");
+            mx += 2;
+        }
     }
 
     bold = (height > 1 && !last_messages);
@@ -142,14 +152,6 @@ curses_message_win_puts(const char *message, boolean recursed)
         free(tmpstr);
     } else {
         mvwprintw(win, my, mx, "%s", message), mx += message_length;
-        /* two spaces to separate this message from next one if they happen
-           to fit on the same line; (FIXME:  it would be better if this was
-           done at start of next message rather than end of this one since
-           it impacts placement of "More>>") */
-        if (mx < width - 2) {
-            if (++mx < width - 2)
-                ++mx;
-        }
         if (bold)
             curses_toggle_color_attr(win, NONE, A_BOLD, OFF);
     }
@@ -705,10 +707,7 @@ directional_scroll(winid wid, int nlines)
     wscrl(win, nlines);
     scrollok(win, FALSE);
     if (wid == MESSAGE_WIN) {
-        if (border)
-            mx = 1;
-        else
-            mx = 0;
+        mx = border ? 1 : 0;
     }
     if (border) {
         box(win, 0, 0);