diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 8d778b1c9..1bd82a925 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.71 $ $NHDT-Date: 1561457861 2019/06/25 10:17:41 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.72 $ $NHDT-Date: 1561681080 2019/06/28 00:18:00 $ 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, @@ -156,6 +156,8 @@ curses: when map window was clipped, the 'scrollbars' shown to indicate which "*--------------" for horizontal (and comparable '*' with multiple '|' underneath for vertical) when it meant to show "---******------" if the 2nd and 3rd fifths (for example) were currently within view +curses: support users's setting for erase char and kill char when getting a + line of input with 'popup_dialog' Off (already supported for popup On) 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 diff --git a/win/curses/cursmain.c b/win/curses/cursmain.c index 0b36d5622..5b424a8e2 100644 --- a/win/curses/cursmain.c +++ b/win/curses/cursmain.c @@ -9,6 +9,15 @@ #include "color.h" #include "wincurs.h" +/* define this if not linking with tty.o|.obj for some reason */ +#ifdef CURSES_DEFINE_ERASE_CHAR +char erase_char, kill_char; +#else +/* defined in sys//tty.o|.obj which gets linked into + tty-only, tty+curses, and curses-only binaries */ +extern char erase_char, kill_char; +#endif + extern long curs_mesg_suppress_turn; /* from cursmesg.c */ /* Public functions for curses NetHack interface */ @@ -183,6 +192,10 @@ curses_init_nhwindows(int *argcp UNUSED, if ((term_rows < 15) || (term_cols < 40)) { panic("Terminal too small. Must be minumum 40 width and 15 height"); } + /* during line input, deletes the most recently typed character */ + erase_char = erasechar(); /* / or possibly */ + /* during line input, deletes all typed characters */ + kill_char = killchar(); /* ^U (back in prehistoric times, '@') */ curses_create_main_windows(); curses_init_mesg_history(); diff --git a/win/curses/cursmesg.c b/win/curses/cursmesg.c index 992d5741f..ce46ebfae 100644 --- a/win/curses/cursmesg.c +++ b/win/curses/cursmesg.c @@ -9,6 +9,10 @@ #include "cursmesg.h" #include +/* defined in sys//tty.c or cursmain.c as last resort; + set up by curses_init_nhwindows() */ +extern char erase_char, kill_char; + /* * Note: references to "More>>" mean ">>", the curses rendition of "--More--". */ @@ -591,19 +595,19 @@ curses_message_win_getline(const char *prompt, char *answer, int buffer) #else ch = getch(); #endif -#if 0 /* [erase_char (delete one character) and kill_char (delete all - * characters) are from tty and not currently set up for curses] */ - if (ch == erase_char) { + curs_set(0); + + if (erase_char && ch == erase_char) { ch = '\177'; /* match switch-case below */ /* honor kill_char if it's ^U or similar, but not if it's '@' */ - } else if (ch == kill_char && (ch < ' ' || ch >= '\177')) { /*ASCII*/ + } else if (kill_char && ch == kill_char + && (ch < ' ' || ch >= '\177')) { /*ASCII*/ if (len == 0) /* nothing to kill; just start over */ continue; ch = '\033'; /* get rid of all current input, then start over */ } -#endif - curs_set(0); + switch (ch) { case ERR: /* should not happen */ *answer = '\0';