summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/menu.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/menu.cc')
-rw-r--r--crawl-ref/source/menu.cc34
1 files changed, 34 insertions, 0 deletions
diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc
index 85f596b1db..10573e0f6e 100644
--- a/crawl-ref/source/menu.cc
+++ b/crawl-ref/source/menu.cc
@@ -207,6 +207,40 @@ bool Menu::process_key( int keyin )
}
break;
}
+ case CONTROL('F'):
+ {
+ if ( !( flags & MF_ALLOW_FILTER ) )
+ break;
+ char linebuf[80];
+ gotoxy(1,1);
+ clear_to_end_of_line();
+ textcolor(WHITE);
+ cprintf("Select what? (regex) ");
+ textcolor(DARKGREY);
+ bool validline = !cancelable_get_line(linebuf, sizeof linebuf, 80);
+ if ( validline && linebuf[0] )
+ {
+ text_pattern tpat(linebuf);
+ for ( unsigned int i = 0; i < items.size(); ++i )
+ {
+ if ( items[i]->level == MEL_ITEM &&
+ tpat.matches(items[i]->get_text()) )
+ {
+ select_index(i);
+ if ( flags & MF_SINGLESELECT )
+ {
+ // Return the first item found.
+ get_selected(&sel);
+ return false;
+ }
+ }
+ }
+ get_selected(&sel);
+ }
+ nav = true;
+ repaint = true;
+ break;
+ }
default:
keyin = post_process(keyin);
lastch = keyin;