diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 0e135111c..90853cb8e 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -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 " armor" will match item named " 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 diff --git a/include/extern.h b/include/extern.h index 4b1e0fd39..2cea07cca 100644 --- a/include/extern.h +++ b/include/extern.h @@ -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); diff --git a/src/cmd.c b/src/cmd.c index 7282edad5..de8ee9998 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -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; } diff --git a/src/do_name.c b/src/do_name.c index 0f6e7a1a7..ee6ae0541 100644 --- a/src/do_name.c +++ b/src/do_name.c @@ -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);