tty: menu search (':') fix
'm O' is a prime candidate for using ':' to select a menu item since you can use that to avoid scrolling through many pages, but typing ':' would immediately overwrite two or three lines of the menu with a status refresh. curses doesn't suffer from this problem. X11 and Qt show menus in separate windows do don't either. Not sure about WinGUI. I think that this may have been reported in the past, but if so I don't recall by whom, or why it wasn't addressed.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1294 $ $NHDT-Date: 1699813307 2023/11/12 18:21:47 $
|
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1297 $ $NHDT-Date: 1700204638 2023/11/17 07:03:58 $
|
||||||
|
|
||||||
General Fixes and Modified Features
|
General Fixes and Modified Features
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
@@ -2024,6 +2024,8 @@ tty: if a menu used full screen and brought up another menu that wasn't full
|
|||||||
it with most of the map left blank until after the menu was dismissed
|
it with most of the map left blank until after the menu was dismissed
|
||||||
tty: have <return> dismiss pick-none menus instead of acting like '>' (not
|
tty: have <return> dismiss pick-none menus instead of acting like '>' (not
|
||||||
only wouldn't dismiss when not on last page, wouldn't dismiss at all)
|
only wouldn't dismiss when not on last page, wouldn't dismiss at all)
|
||||||
|
tty: menu search via ':' would clobber part of the menu with a status line
|
||||||
|
refresh if the menu was tall enough to cover that
|
||||||
Unix: when user name is used as default character name, keep hyphenated value
|
Unix: when user name is used as default character name, keep hyphenated value
|
||||||
intact instead stripping off dash and whatever follows as if that
|
intact instead stripping off dash and whatever follows as if that
|
||||||
specified role/race/&c (worked once upon a time; broken since 3.3.0)
|
specified role/race/&c (worked once upon a time; broken since 3.3.0)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* NetHack 3.7 getline.c $NHDT-Date: 1596498343 2020/08/03 23:45:43 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.44 $ */
|
/* NetHack 3.7 getline.c $NHDT-Date: 1700204638 2023/11/17 07:03:58 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.56 $ */
|
||||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/*-Copyright (c) Michael Allison, 2006. */
|
/*-Copyright (c) Michael Allison, 2006. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
@@ -28,8 +28,9 @@ extern char erase_char, kill_char; /* from appropriate tty.c file */
|
|||||||
/*
|
/*
|
||||||
* Read a line closed with '\n' into the array char bufp[BUFSZ].
|
* Read a line closed with '\n' into the array char bufp[BUFSZ].
|
||||||
* (The '\n' is not stored. The string is closed with a '\0'.)
|
* (The '\n' is not stored. The string is closed with a '\0'.)
|
||||||
* Reading can be interrupted by an escape ('\033') - now the
|
* Reading can be interrupted by an escape ('\033'). If there is already
|
||||||
* resulting string is "\033".
|
* some text, it is removed and prompting continues as if from the start.
|
||||||
|
* However, if there is no text yet (or anymore) then "\033" is returned.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
tty_getlin(const char *query, register char *bufp)
|
tty_getlin(const char *query, register char *bufp)
|
||||||
@@ -55,8 +56,20 @@ hooked_tty_getlin(
|
|||||||
ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT;
|
ttyDisplay->toplin = TOPLINE_SPECIAL_PROMPT;
|
||||||
ttyDisplay->inread++;
|
ttyDisplay->inread++;
|
||||||
|
|
||||||
/* issue the prompt */
|
/*
|
||||||
|
* Issue the prompt.
|
||||||
|
*
|
||||||
|
* custompline() will call vpline() which calls flush_screen() which
|
||||||
|
* calls bot(). We don't want bot() modifying the screen during
|
||||||
|
* whatever this prompt is for. If the status area hasn't been
|
||||||
|
* overwritten, no update is needed, but if has been overwritten (by
|
||||||
|
* a menu or text window) we don't want status refresh to clobber that
|
||||||
|
* when the window hasn't finished yet. [Fix for menu search via ':'.]
|
||||||
|
*/
|
||||||
|
if (ttyDisplay->lastwin != WIN_STATUS)
|
||||||
|
gc.context.botl = gc.context.botlx = iflags.time_botl = FALSE;
|
||||||
custompline(OVERRIDE_MSGTYPE | SUPPRESS_HISTORY, "%s ", query);
|
custompline(OVERRIDE_MSGTYPE | SUPPRESS_HISTORY, "%s ", query);
|
||||||
|
|
||||||
#ifdef EDIT_GETLIN
|
#ifdef EDIT_GETLIN
|
||||||
/* bufp is input/output; treat current contents (presumed to be from
|
/* bufp is input/output; treat current contents (presumed to be from
|
||||||
previous getlin()) as default input */
|
previous getlin()) as default input */
|
||||||
@@ -90,7 +103,7 @@ hooked_tty_getlin(
|
|||||||
ttyDisplay->intr--;
|
ttyDisplay->intr--;
|
||||||
*bufp = 0;
|
*bufp = 0;
|
||||||
}
|
}
|
||||||
if (c == '\020') { /* ctrl-P */
|
if (c == '\020') { /* ctrl-P, doesn't honor rebinding #prevmsg cmd */
|
||||||
if (iflags.prevmsg_window != 's') {
|
if (iflags.prevmsg_window != 's') {
|
||||||
int sav = ttyDisplay->inread;
|
int sav = ttyDisplay->inread;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user