while (1) {
                struct thread *thread = NULL;
                struct map *map = NULL;
-               int choice = 0;
+               int choice;
                int socked_id = -1;
 
-               nr_options = 0;
-
-               key = hist_browser__run(browser, helpline, warn_lost_event, 0);
+               key = 0; // reset key
+do_hotkey:              // key came straight from options ui__popup_menu()
+               choice = nr_options = 0;
+               key = hist_browser__run(browser, helpline, warn_lost_event, key);
 
                if (browser->he_selection != NULL) {
                        thread = hist_browser__selected_thread(browser);
                do {
                        struct popup_action *act;
 
-                       choice = ui__popup_menu(nr_options, options, NULL);
-                       if (choice == -1 || choice >= nr_options)
+                       choice = ui__popup_menu(nr_options, options, &key);
+                       if (choice == -1)
                                break;
 
+                       if (choice == nr_options)
+                               goto do_hotkey;
+
                        act = &actions[choice];
                        key = act->fn(browser, act);
                } while (key == 1);