Skip to content

Commit

Permalink
more ^R
Browse files Browse the repository at this point in the history
> 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.
  • Loading branch information
nethack.rankin committed May 8, 2005
1 parent bb19016 commit 06bb86e
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 13 deletions.
2 changes: 2 additions & 0 deletions doc/fixes34.4
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion include/extern.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 9 additions & 1 deletion src/cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -1301,6 +1301,7 @@ minimal_enlightenment()
return (n != -1);
}

/* ^X command */
STATIC_PTR int
doattributes()
{
Expand Down Expand Up @@ -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";
Expand Down Expand Up @@ -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;
}
Expand Down
22 changes: 11 additions & 11 deletions src/do_name.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 06bb86e

Please sign in to comment.