> clear stale prompt
[...]
> Can someone who understands the relevant windowing code fix ^R in getpos()?

     I still don't understand why it wasn't working as expected, but moving
the existing cursor positioning after flush_screen() instead of before now
makes ^R work ok during getpos().  It doesn't restore the top line text so
isn't a transparent redraw but it now displays a prompt string there instead.
Likewise after typing '?' for help so that it should be move evident that
nethack is still waiting for you to move the cursor somewhere.

     Also add support for ^L in numpad mode.  I almost never use that and
didn't think of it the first time around.
This commit is contained in:
nethack.rankin
2005-05-08 04:22:53 +00:00
parent bb19016785
commit 06bb86e63b
4 changed files with 24 additions and 13 deletions

View File

@@ -142,6 +142,8 @@ when adding an item to inventory, try to stack it with the quiver slot
cockatrice meat has a distinct flavor to some
wish request for "<something> armor" will match item named "<something> mail"
Fire Brand and Frost Brand have a chance to avoid taking rust damage
support ^R (and ^L in numpad mode) to request display repaint during direction
choosing and location choosing prompting modes
Platform- and/or Interface-Specific New Features

View File

@@ -155,12 +155,13 @@ E boolean NDECL(status_hilite_menu);
/* ### cmd.c ### */
E boolean FDECL(redraw_cmd, (CHAR_P));
#ifdef USE_TRAMPOLI
E int NDECL(doextcmd);
E int NDECL(domonability);
E int NDECL(doprev_message);
E int NDECL(timed_occupation);
E int NDECL(wiz_attributes);
E int NDECL(doattributes);
E int NDECL(enter_explore_mode);
# ifdef WIZARD
E int NDECL(wiz_detect);

View File

@@ -1301,6 +1301,7 @@ minimal_enlightenment()
return (n != -1);
}
/* ^X command */
STATIC_PTR int
doattributes()
{
@@ -1654,6 +1655,13 @@ add_debug_extended_commands()
}
}
/* decide whether a character (user input keystroke) requests screen repaint */
boolean
redraw_cmd(c)
char c;
{
return (c == C('r') || (iflags.num_pad && c == C('l')));
}
static const char template[] = "%-18s %4ld %6ld";
static const char count_str[] = " count bytes";
@@ -2171,7 +2179,7 @@ const char *s;
dirsym = yn_function((s && *s != '^') ? s : "In what direction?",
(char *)0, '\0');
if (dirsym == C('r')) { /* ^R */
if (redraw_cmd(dirsym)) { /* ^R */
docrt(); /* redraw */
goto retry;
}

View File

@@ -23,11 +23,6 @@ nextmbuf()
return bufs[bufidx];
}
/* same definition as in cmd.c */
#ifndef C
#define C(a) ((a) & 0x1f) /* ^a */
#endif
/* the response for '?' help request in getpos() */
STATIC_OVL void
getpos_help(force, goal)
@@ -71,6 +66,7 @@ const char *goal;
const char *sdp;
if(iflags.num_pad) sdp = ndir; else sdp = sdir; /* DICE workaround */
if (!goal) goal = "desired location";
if (flags.verbose) {
pline("(For instructions type a ?)");
msg_given = TRUE;
@@ -80,8 +76,8 @@ const char *goal;
#ifdef CLIPPING
cliparound(cx, cy);
#endif
curs(WIN_MAP, cx,cy);
flush_screen(0);
curs(WIN_MAP, cx, cy);
#ifdef MAC
lock_mouse_cursor(TRUE);
#endif
@@ -139,10 +135,14 @@ const char *goal;
goto nxtc;
}
if(c == '?'){
getpos_help(force, goal);
} else if (c == C('r')) { /* ^R */
docrt(); /* redraw */
if (c == '?' || redraw_cmd(c)) {
if (c == '?')
getpos_help(force, goal);
else /* ^R */
docrt(); /* redraw */
/* update message window to reflect that we're still targetting */
pline("Move cursor to %s:", goal);
msg_given = TRUE;
} else {
if (!index(quitchars, c)) {
char matching[MAXPCHARS];
@@ -197,8 +197,8 @@ const char *goal;
#ifdef CLIPPING
cliparound(cx, cy);
#endif
curs(WIN_MAP,cx,cy);
flush_screen(0);
curs(WIN_MAP, cx, cy);
}
#ifdef MAC
lock_mouse_cursor(FALSE);