curses vs extended commands

Extend the earlier support for Delete/Rubout in getline() to the
text entry for extended commands.  In other words, treat <delete>
and <backspace> as synonyms in both places.

Some reformatting too, but only in a couple of the files.
This commit is contained in:
PatR
2019-03-10 14:53:31 -07:00
parent 02b21865fd
commit 683226c3c5
3 changed files with 45 additions and 41 deletions
+29 -27
View File
@@ -76,7 +76,8 @@ static int menu_max_height(void);
static nhmenu *nhmenus = NULL; /* NetHack menu array */
/* Get a line of text from the player, such as asking for a character name or a wish */
/* Get a line of text from the player, such as asking for a character name
or a wish */
void
curses_line_input_dialog(const char *prompt, char *answer, int buffer)
@@ -333,7 +334,7 @@ curses_ext_cmd()
if (iflags.extmenu) {
return extcmd_via_menu();
}
startx = 0;
starty = 0;
if (iflags.wc_popup_dialog) { /* Prompt in popup window */
@@ -341,9 +342,9 @@ curses_ext_cmd()
extwin2 = curses_create_window(25, 1, UP);
wrefresh(extwin2);
/* create window inside window to prevent overwriting of border */
getbegyx(extwin2,y0,x0);
getmaxyx(extwin2,h,w);
extwin = newwin(1, w-2, y0+1, x0+1);
getbegyx(extwin2, y0, x0);
getmaxyx(extwin2, h, w);
extwin = newwin(1, w - 2, y0 + 1, x0 + 1);
if (w - 4 < maxlen) maxlen = w - 4;
} else {
curses_get_window_xy(MESSAGE_WIN, &winx, &winy);
@@ -355,8 +356,9 @@ curses_ext_cmd()
}
winy += messageh - 1;
extwin = newwin(1, messagew-2, winy, winx);
if (messagew - 4 < maxlen) maxlen = messagew - 4;
extwin = newwin(1, messagew - 2, winy, winx);
if (messagew - 4 < maxlen)
maxlen = messagew - 4;
pline("#");
}
@@ -390,7 +392,7 @@ curses_ext_cmd()
break;
}
if ((letter == '\r') || (letter == '\n')) {
if (letter == '\r' || letter == '\n') {
if (ret == -1) {
for (count = 0; extcmdlist[count].ef_txt; count++) {
if (!strcasecmp(cur_choice, extcmdlist[count].ef_txt)) {
@@ -402,7 +404,9 @@ curses_ext_cmd()
break;
}
if ((letter == '\b') || (letter == KEY_BACKSPACE)) {
if (letter == '\177') /* DEL/Rubout */
letter = '\b';
if (letter == '\b' || letter == KEY_BACKSPACE) {
if (prompt_width == 0) {
ret = -1;
break;
@@ -749,10 +753,9 @@ menu_get_accel(boolean first)
ret = next_letter;
if (((next_letter < 'z') && (next_letter >= 'a')) || ((next_letter < 'Z')
&& (next_letter >=
'A')) ||
((next_letter < '9') && (next_letter >= '0'))) {
if ((next_letter < 'z' && next_letter >= 'a')
|| (next_letter < 'Z' && next_letter >= 'A')
|| (next_letter < '9' && next_letter >= '0')) {
next_letter++;
} else if (next_letter == 'z') {
next_letter = 'A';
@@ -789,8 +792,8 @@ menu_is_multipage(nhmenu *menu, int width, int height)
menu_item_ptr->num_lines = num_lines;
curline += num_lines;
menu_item_ptr = menu_item_ptr->next_item;
if ((curline > height) || ((curline > height - 2) &&
(height == menu_max_height()))) {
if (curline > height
|| (curline > height - 2 && height == menu_max_height())) {
break;
}
}
@@ -895,7 +898,7 @@ menu_win_size(nhmenu *menu)
menu_item_ptr = menu_item_ptr->next_item;
}
/* If the widest entry is smaller than maxwidth, reduce maxwidth accordingly */
/* If widest entry is smaller than maxwidth, reduce maxwidth accordingly */
if (maxentrywidth < maxwidth) {
maxwidth = maxentrywidth;
}
@@ -922,7 +925,7 @@ menu_win_size(nhmenu *menu)
if (lastline < maxheight) {
maxheight = lastline;
}
} else { /* If multipage, make sure we have enough width for page footer */
} else { /* If multipage, make sure we have enough width for page footer */
if (width < 20) {
width = 20;
@@ -1218,8 +1221,8 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
menu_item_ptr = menu->entries;
while (menu_item_ptr != NULL) {
if ((menu_item_ptr->identifier.a_void != NULL) &&
(strstri(menu_item_ptr->str, search_key))) {
if (menu_item_ptr->identifier.a_void != NULL
&& strstri(menu_item_ptr->str, search_key)) {
if (how == PICK_ONE) {
menu_clear_selections(menu);
menu_select_deselect(win, menu_item_ptr, SELECT);
@@ -1247,12 +1250,11 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
menu_item_ptr = menu->entries;
while (menu_item_ptr != NULL) {
if (menu_item_ptr->identifier.a_void != NULL) {
if (((curletter == menu_item_ptr->accelerator) &&
((curpage == menu_item_ptr->page_num) ||
(!menu->reuse_accels))) || ((menu_item_ptr->group_accel)
&& (curletter ==
menu_item_ptr->
group_accel))) {
if ((curletter == menu_item_ptr->accelerator
&& (curpage == menu_item_ptr->page_num
|| !menu->reuse_accels))
|| (menu_item_ptr->group_accel
&& curletter == menu_item_ptr->group_accel)) {
if (curpage != menu_item_ptr->page_num) {
curpage = menu_item_ptr->page_num;
menu_display_page(menu, win, curpage);
@@ -1266,7 +1268,7 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
num_selected = 1;
dismiss = TRUE;
break;
} else if ((how == PICK_ANY) && (curletter == count_letter)) {
} else if (how == PICK_ANY && curletter == count_letter) {
menu_select_deselect(win, menu_item_ptr, SELECT);
menu_item_ptr->count = count;
count = 0;
@@ -1280,7 +1282,7 @@ menu_get_selections(WINDOW * win, nhmenu *menu, int how)
}
}
if ((how == PICK_ANY) && (num_selected != -1)) {
if (how == PICK_ANY && num_selected != -1) {
num_selected = 0;
menu_item_ptr = menu->entries;