curses moving left with ^H

Typing ^H actually passed a 16-bit value back to the core which got
interpreted as ^G after the extra bits were discarded.  I don't think
any previous changes to the curses interface caused this.  It's
astonishing that no one ever noticed; the world must be full of numpad
users.
This commit is contained in:
PatR
2019-07-06 16:41:04 -07:00
parent bf672f7f47
commit e84a0625dc
3 changed files with 10 additions and 2 deletions
+2 -1
View File
@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.84 $ $NHDT-Date: 1562203850 2019/07/04 01:30:50 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.85 $ $NHDT-Date: 1562456458 2019/07/06 23:40:58 $
This fixes36.3 file is here to capture information about updates in the 3.6.x 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, lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -169,6 +169,7 @@ curses: when map window was clipped, the 'scrollbars' shown to indicate which
the 2nd and 3rd fifths (for example) were currently within view 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 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) line of input with 'popup_dialog' Off (already supported for popup On)
curses: attempting to use ^H to rush left actually executed ^G (#wizgenesis)
curses+'perm_invent': entries were wrapping without any control; usually not curses+'perm_invent': entries were wrapping without any control; usually not
noticeable because next entry overwrote, but visible for final entry noticeable because next entry overwrote, but visible for final entry
when whole inventory fit within the available height; looked ok with when whole inventory fit within the available height; looked ok with
+1 -1
View File
@@ -661,7 +661,7 @@ curses_message_win_getline(const char *prompt, char *answer, int buffer)
goto alldone; goto alldone;
case '\177': /* DEL/Rubout */ case '\177': /* DEL/Rubout */
case KEY_DC: /* delete-character */ case KEY_DC: /* delete-character */
case '\b': /* ^H (Backspace: '\011') */ case '\b': /* ^H (Backspace: '\010') */
case KEY_BACKSPACE: case KEY_BACKSPACE:
if (len < 1) { if (len < 1) {
len = 1; len = 1;
+7
View File
@@ -792,6 +792,13 @@ curses_convert_keys(int key)
/* Handle arrow keys */ /* Handle arrow keys */
switch (key) { switch (key) {
case KEY_BACKSPACE:
/* we can't distinguish between a separate backspace key and
explicit Ctrl+H intended to rush to the left; without this,
a value for ^H greater than 255 is passed back to core's
readchar() and stripping the value down to 0..255 yields ^G! */
ret = C('H');
break;
case KEY_LEFT: case KEY_LEFT:
if (iflags.num_pad) { if (iflags.num_pad) {
ret = '4'; ret = '4';