diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 98a1c79f3..45975b85c 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.66 $ $NHDT-Date: 1561414302 2019/06/24 22:11:42 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.67 $ $NHDT-Date: 1561426762 2019/06/25 01:39:22 $ This fixes36.3 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.2 in May 2019. Please note, however, @@ -144,6 +144,16 @@ curses: don't convert ^M (or or key) into ^J; both ^J and ^M cause the hero to try to move curses: draw map in screen columns 1..79 like tty, rather than in 2..80 curses: make text windows wider so that help feedback is more readable +curses+'perm_invent': entries were wrapping without any control; usually not + noticeable because next entry overwrote, but visible for final entry + when whole inventory fit within the available height; looked ok with + borders Off but clearly wrong for borders On +curses+'perm_invent': if too many entries for window height, last one which + fit had the next one appended (including hightlighted selector letter) + when window borders were Off +curses+'perm_invent': top line was wasted (left blank) when borders Off +curses+'perm_invent': don't highlight inventory letters since nothing is + selectable from the menu comprising the persistent inventory window curses+EDIT_GETLIN: when a prompt's answer was preloaded, using ESC to discard it deleted it from the answer buffer but didn't erase it from screen tty: re-do one optimization used when status conditions have all been removed @@ -163,6 +173,9 @@ classify sources as released, beta, or work-in-progress via NH_DEVEL_STATUS if you reach the edge of a level (relatively uncommon) and try to move off, report that you can't go farther if the 'mention_walls' option is set wizard-mode: display effect to show where an unseen wished-for monster landed +curses+'perm_invent': since persistent inventory is narrow, strip off "a", + "an", or "the" prefix on inventory entries shown there so that a tiny + bit more of the interesting portion is visible NetHack Community Patches (or Variation) Included diff --git a/win/curses/cursinvt.c b/win/curses/cursinvt.c index 17af0381b..6cb8cd67c 100644 --- a/win/curses/cursinvt.c +++ b/win/curses/cursinvt.c @@ -53,7 +53,7 @@ curses_update_inv(void) wnoutrefresh(win); } -/* Adds an inventory item. */ +/* Adds an inventory item. 'y' is 1 rather than 0 for the first item. */ void curses_add_inv(int y, int glyph UNUSED, @@ -61,21 +61,59 @@ curses_add_inv(int y, { WINDOW *win = curses_get_nhwin(INV_WIN); int color = NO_COLOR; - int x = 0; + int x = 0, width, height, available_width, + border = curses_window_has_border(INV_WIN) ? 1 : 0; /* Figure out where to draw the line */ - if (curses_window_has_border(INV_WIN)) { - x++; - } + x += border; /* x starts at 0 and is incremented for border */ + y -= 1 - border; /* y starts at 1 and is decremented for non-border */ + + curses_get_window_size(INV_WIN, &height, &width); + /* + * TODO: + * If border is On and 'y' is too big, turn border Off in order to + * get two more lines of perm_invent. + * + * And/or implement a way to switch focus from map to inventory + * so that the latter can be scrolled. Must not require use of a + * mouse. + * + * Also, when entries are omitted due to lack of space, mark the + * last line to indicate "there's more that you can't see" (like + * horizontal status window does for excess status conditions). + * Normal menu does this via 'page M of N'. + */ + if (y - border >= height) /* 'height' is already -2 for Top+Btm borders */ + return; + available_width = width; /* 'width' also already -2 for Lft+Rgt borders */ wmove(win, y, x); if (accelerator) { +#if 0 attr_t bold = A_BOLD; wattron(win, bold); waddch(win, accelerator); wattroff(win, bold); wprintw(win, ") "); +#else + /* despite being shown as a menu, nothing is selectable from the + persistent inventory window so don't highlight inventory letters */ + wprintw(win, "%c) ", accelerator); +#endif + available_width -= 3; + + /* narrow the entries to fit more of the interesting text; do so + unconditionally rather than trying to figure whether it's needed; + when 'sortpack' is enabled we could also strip out " of" + from " of but if that's to be done, + core ought to do it */ + if (!strncmpi(str, "a ", 2)) + str += 2; + else if (!strncmpi(str, "an ", 3)) + str += 3; + else if (!strncmpi(str, "the ", 4)) + str +=4; } #if 0 /* FIXME: MENU GLYPHS */ if (accelerator && glyph != NO_GLYPH && iflags.use_menu_glyphs) { @@ -84,27 +122,25 @@ curses_add_inv(int y, int symbol = 0; attr_t glyphclr; - mapglyph(glyph, &symbol, &color, &dummy, - u.ux, u.uy); + mapglyph(glyph, &symbol, &color, &dummy, u.ux, u.uy); glyphclr = curses_color_attr(color, 0); wattron(win, glyphclr); wprintw(win, "%c ", symbol); wattroff(win, glyphclr); + available_width -= 2; } #endif if (accelerator /* Don't colorize categories */ && iflags.use_menu_color) { - char str_mutable[BUFSZ]; - - Strcpy(str_mutable, str); attr = 0; - get_menu_coloring(str_mutable, &color, (int *) &attr); + get_menu_coloring(str, &color, (int *) &attr); attr = curses_convert_attr(attr); } - if (color == NO_COLOR) color = NONE; + if (color == NO_COLOR) + color = NONE; curses_toggle_color_attr(win, color, attr, ON); /* wattron(win, attr); */ - wprintw(win, "%s", str); + wprintw(win, "%.*s", available_width, str); /* wattroff(win, attr); */ curses_toggle_color_attr(win, color, attr, OFF); wclrtoeol(win);