'O' vs msg_window option
Change 'O's sub-menu for selecting new msg_window option setting to work similar to the one for menustyle: show a description of what the values mean with a two-line, two-column menu entry. Also make its current value be pre-selected. msg_window is a bit more complicated than menustyle because only some interfaces support it and curses only supports two of the four choices. It currently has one hard-coded reference to "^P" (in the tty-specific 'combination' choice). Changing that is feasible but seems like more trouble than it'd be worth.
This commit is contained in:
+1
-1
@@ -324,7 +324,7 @@ opt_##a,
|
|||||||
NoAlias, "list of symbols to use for monsters")
|
NoAlias, "list of symbols to use for monsters")
|
||||||
NHOPTC(mouse_support, 0, opt_in, set_in_game, No, Yes, No, No, NoAlias,
|
NHOPTC(mouse_support, 0, opt_in, set_in_game, No, Yes, No, No, NoAlias,
|
||||||
"game receives click info from mouse")
|
"game receives click info from mouse")
|
||||||
#if defined(TTY_GRAPHICS) || defined(CURSES_GRAPHICS)
|
#if PREV_MSGS /* tty or curses */
|
||||||
NHOPTC(msg_window, 1, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias,
|
NHOPTC(msg_window, 1, opt_in, set_in_game, Yes, Yes, No, Yes, NoAlias,
|
||||||
"control of \"view previous message(s)\" (^P) behavior")
|
"control of \"view previous message(s)\" (^P) behavior")
|
||||||
#else
|
#else
|
||||||
|
|||||||
+56
-25
@@ -18,6 +18,13 @@ NEARDATA struct instance_flags iflags; /* provide linkage */
|
|||||||
|
|
||||||
#define BACKWARD_COMPAT
|
#define BACKWARD_COMPAT
|
||||||
|
|
||||||
|
/* whether the 'msg_window' option is used to control ^P behavior */
|
||||||
|
#if defined(TTY_GRAPHICS) || defined(CURSES_GRAPHICS)
|
||||||
|
#define PREV_MSGS 1
|
||||||
|
#else
|
||||||
|
#define PREV_MSGS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NOTE: If you add (or delete) an option, please review the following:
|
* NOTE: If you add (or delete) an option, please review the following:
|
||||||
* doc/options.txt
|
* doc/options.txt
|
||||||
@@ -171,6 +178,18 @@ static NEARDATA const char *menutype[][3] = { /* 'menustyle' settings */
|
|||||||
{ "partial", "[skip class filtering; always",
|
{ "partial", "[skip class filtering; always",
|
||||||
" use menu of all available items]" }
|
" use menu of all available items]" }
|
||||||
};
|
};
|
||||||
|
#if PREV_MSGS /* tty supports all four settings, curses just final two */
|
||||||
|
static NEARDATA const char *msgwind[][3] = { /* 'msg_window' settings */
|
||||||
|
{ "single", "[show one old message at a time,",
|
||||||
|
" most recent first]" },
|
||||||
|
{ "combination", "[for consecutive ^P requests, use",
|
||||||
|
" 'single' for first two, then 'full']" },
|
||||||
|
{ "full", "[show all available messages,",
|
||||||
|
" oldest first and most recent last]" },
|
||||||
|
{ "reversed", "[show all available messages,",
|
||||||
|
" most recent first]" }
|
||||||
|
};
|
||||||
|
#endif
|
||||||
static NEARDATA const char *burdentype[] = {
|
static NEARDATA const char *burdentype[] = {
|
||||||
"unencumbered", "burdened", "stressed",
|
"unencumbered", "burdened", "stressed",
|
||||||
"strained", "overtaxed", "overloaded"
|
"strained", "overtaxed", "overloaded"
|
||||||
@@ -1815,13 +1834,6 @@ optfn_mouse_support(
|
|||||||
return optn_ok;
|
return optn_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* whether the 'msg_window' option is used to control ^P behavior */
|
|
||||||
#if defined(TTY_GRAPHICS) || defined(CURSES_GRAPHICS)
|
|
||||||
#define PREV_MSGS 1
|
|
||||||
#else
|
|
||||||
#define PREV_MSGS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
optfn_msg_window(int optidx, int req, boolean negated, char *opts, char *op)
|
optfn_msg_window(int optidx, int req, boolean negated, char *opts, char *op)
|
||||||
{
|
{
|
||||||
@@ -4494,39 +4506,58 @@ handler_menu_headings(void)
|
|||||||
static int
|
static int
|
||||||
handler_msg_window(void)
|
handler_msg_window(void)
|
||||||
{
|
{
|
||||||
#if defined(TTY_GRAPHICS) || defined(CURSES_GRAPHICS)
|
#if PREV_MSGS /* tty or curses */
|
||||||
winid tmpwin;
|
winid tmpwin;
|
||||||
anything any;
|
anything any;
|
||||||
|
boolean is_tty = WINDOWPORT("tty"), is_curses = WINDOWPORT("curses");
|
||||||
|
|
||||||
if (WINDOWPORT("tty") || WINDOWPORT("curses")) {
|
if (is_tty || is_curses) {
|
||||||
/* by Christian W. Cooper */
|
/* by Christian W. Cooper */
|
||||||
|
boolean chngd;
|
||||||
|
int i, n;
|
||||||
|
char buf[BUFSZ], c,
|
||||||
|
sep = iflags.menu_tab_sep ? '\t' : ' ',
|
||||||
|
old_prevmsg_window = iflags.prevmsg_window;
|
||||||
menu_item *window_pick = (menu_item *) 0;
|
menu_item *window_pick = (menu_item *) 0;
|
||||||
|
|
||||||
tmpwin = create_nhwindow(NHW_MENU);
|
tmpwin = create_nhwindow(NHW_MENU);
|
||||||
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
|
start_menu(tmpwin, MENU_BEHAVE_STANDARD);
|
||||||
any = cg.zeroany;
|
any = cg.zeroany;
|
||||||
if (!WINDOWPORT("curses")) {
|
|
||||||
any.a_char = 's';
|
for (i = 0; i < SIZE(menutype); i++) {
|
||||||
add_menu(tmpwin, &nul_glyphinfo, &any, 's',
|
if (i < 2 && is_curses)
|
||||||
0, ATR_NONE, "single", MENU_ITEMFLAGS_NONE);
|
continue;
|
||||||
any.a_char = 'c';
|
Sprintf(buf, "%-12.12s%c%.60s", msgwind[i][0], sep, msgwind[i][1]);
|
||||||
add_menu(tmpwin, &nul_glyphinfo, &any, 'c',
|
any.a_char = c = *msgwind[i][0];
|
||||||
0, ATR_NONE, "combination", MENU_ITEMFLAGS_NONE);
|
add_menu(tmpwin, &nul_glyphinfo, &any, *buf, 0, ATR_NONE, buf,
|
||||||
|
(c == iflags.prevmsg_window) ? MENU_ITEMFLAGS_SELECTED
|
||||||
|
: MENU_ITEMFLAGS_NONE);
|
||||||
|
/* second line is prefixed by spaces that "c - " would use */
|
||||||
|
Sprintf(buf, "%4s%-12.12s%c%.60s", "", "", sep, msgwind[i][2]);
|
||||||
|
any.a_char = '\0';
|
||||||
|
add_menu(tmpwin, &nul_glyphinfo, &any, 0, 0, ATR_NONE, buf,
|
||||||
|
MENU_ITEMFLAGS_NONE);
|
||||||
}
|
}
|
||||||
any.a_char = 'f';
|
|
||||||
add_menu(tmpwin, &nul_glyphinfo, &any, 'f',
|
|
||||||
0, ATR_NONE, "full", MENU_ITEMFLAGS_NONE);
|
|
||||||
any.a_char = 'r';
|
|
||||||
add_menu(tmpwin, &nul_glyphinfo, &any, 'r',
|
|
||||||
0, ATR_NONE, "reversed", MENU_ITEMFLAGS_NONE);
|
|
||||||
end_menu(tmpwin, "Select message history display type:");
|
end_menu(tmpwin, "Select message history display type:");
|
||||||
if (select_menu(tmpwin, PICK_ONE, &window_pick) > 0) {
|
n = select_menu(tmpwin, PICK_ONE, &window_pick);
|
||||||
iflags.prevmsg_window = window_pick->item.a_char;
|
if (n > 0) {
|
||||||
|
c = window_pick[0].item.a_char;
|
||||||
|
/* if there are two picks, use the one that wasn't pre-selected */
|
||||||
|
if (n > 1 && c == old_prevmsg_window)
|
||||||
|
c = window_pick[1].item.a_char;
|
||||||
|
iflags.prevmsg_window = c;
|
||||||
free((genericptr_t) window_pick);
|
free((genericptr_t) window_pick);
|
||||||
}
|
}
|
||||||
destroy_nhwindow(tmpwin);
|
destroy_nhwindow(tmpwin);
|
||||||
|
chngd = (iflags.prevmsg_window != old_prevmsg_window);
|
||||||
|
if (chngd || flags.verbose) {
|
||||||
|
(void) optfn_msg_window(opt_msg_window, get_val,
|
||||||
|
FALSE, buf, empty_optstr);
|
||||||
|
pline("'msg_window' %.20s \"%.20s\".",
|
||||||
|
chngd ? "changed to" : "is still", buf);
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
#endif /* msg_window for tty or curses */
|
#endif /* PREV_MSGS (for tty or curses) */
|
||||||
pline("'%s' option is not supported for '%s'.",
|
pline("'%s' option is not supported for '%s'.",
|
||||||
allopt[opt_msg_window].name, windowprocs.name);
|
allopt[opt_msg_window].name, windowprocs.name);
|
||||||
return optn_ok;
|
return optn_ok;
|
||||||
|
|||||||
Reference in New Issue
Block a user