curses+EDIT_GETLIN again
Turns the "fix" in commit 319dcf4746
handled removing the default answer for single-line-prompt plus
multi-line-answer but not for multi-line-prompt plus long-enough-
answer-to-reach-another-line. The logic wasn't quite right and I
misunderstood what is stored in linestarts[] so even correct logic
wouldn't have solved things.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.77 $ $NHDT-Date: 1561751390 2019/06/28 19:49:50 $
|
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.78 $ $NHDT-Date: 1561766416 2019/06/29 00:00:16 $
|
||||||
|
|
||||||
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,
|
||||||
@@ -177,6 +177,9 @@ curses+'popup_dialog': show the text cursor at the end of prompts for single
|
|||||||
character input
|
character input
|
||||||
curses+EDIT_GETLIN: when a prompt's answer was preloaded, using ESC to discard
|
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
|
it deleted it from the answer buffer but didn't erase it from screen
|
||||||
|
curses+EDIT_GETLIN: the preceding fix handled an answer which spanned more
|
||||||
|
than one line but didn't remove the answer properly if the prompt
|
||||||
|
portion of prompt+answer spanned more than one line
|
||||||
tty: re-do one optimization used when status conditions have all been removed
|
tty: re-do one optimization used when status conditions have all been removed
|
||||||
and remove another that tried to check whether condition text to be
|
and remove another that tried to check whether condition text to be
|
||||||
displayed next was the same as the existing value; sometimes new
|
displayed next was the same as the existing value; sometimes new
|
||||||
|
|||||||
@@ -550,12 +550,13 @@ curses_message_win_getline(const char *prompt, char *answer, int buffer)
|
|||||||
if that is called for; find where the end of the prompt will
|
if that is called for; find where the end of the prompt will
|
||||||
be without the answer appended */
|
be without the answer appended */
|
||||||
while (ltmp2 > 0) {
|
while (ltmp2 > 0) {
|
||||||
ltmp2 -= ltmp;
|
if ((ltmp2 -= ltmp) < 0) {
|
||||||
|
ltmp = -ltmp2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
promptline -= 1;
|
promptline -= 1;
|
||||||
ltmp = (int) strlen(linestarts[promptline]);
|
ltmp = linestarts[promptline + 1] - linestarts[promptline];
|
||||||
}
|
}
|
||||||
if (ltmp2 < 0)
|
|
||||||
ltmp = -ltmp2;
|
|
||||||
promptx = ltmp + border_space;
|
promptx = ltmp + border_space;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -597,11 +598,11 @@ curses_message_win_getline(const char *prompt, char *answer, int buffer)
|
|||||||
#endif
|
#endif
|
||||||
curs_set(0);
|
curs_set(0);
|
||||||
|
|
||||||
if (erase_char && ch == erase_char) {
|
if (erase_char && ch == (int) (uchar) erase_char) {
|
||||||
ch = '\177'; /* match switch-case below */
|
ch = '\177'; /* match switch-case below */
|
||||||
|
|
||||||
/* honor kill_char if it's ^U or similar, but not if it's '@' */
|
/* honor kill_char if it's ^U or similar, but not if it's '@' */
|
||||||
} else if (kill_char && ch == kill_char
|
} else if (kill_char && ch == (int) (uchar) kill_char
|
||||||
&& (ch < ' ' || ch >= '\177')) { /*ASCII*/
|
&& (ch < ' ' || ch >= '\177')) { /*ASCII*/
|
||||||
if (len == 0) /* nothing to kill; just start over */
|
if (len == 0) /* nothing to kill; just start over */
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user