/* Gives menu-specific keyboard routine to process the shortcut. Returns zero * if the shortcut wasn't processed, otherwise non-zero is returned. */ static int pass_combination_to_khandler(const wchar_t keys[]) { KHandlerResponse handler_response; if(menu->key_handler == NULL) { return 0; } handler_response = menu->key_handler(menu, keys); switch(handler_response) { case KHR_REFRESH_WINDOW: wrefresh(menu_win); return 1; case KHR_CLOSE_MENU: leave_menu_mode(1); return 1; case KHR_MORPHED_MENU: assert(!vle_mode_is(MENU_MODE) && "Wrong use of KHR_MORPHED_MENU."); return 1; case KHR_UNHANDLED: return 0; default: assert(0 && "Unknown menu-specific keyboard handler response."); return 0; } }
void menu_morph_into_cmdline(CmdLineSubmode submode, const char input[], int external) { /* input might point to part of menu data. */ char *input_copy; if(input[0] == '\0') { show_error_msg("Command insertion", "Ignoring empty command"); return; } input_copy = external ? format_str("!%s", input) : strdup(input); if(input_copy == NULL) { show_error_msg("Error", "Not enough memory"); return; } leave_menu_mode(0); enter_cmdline_mode(submode, input_copy, NULL); free(input_copy); }
static void cmd_dd(key_info_t key_info, keys_info_t *keys_info) { if(pass_combination_to_khandler(L"dd") && menu->len == 0) { show_error_msg("Menu is closing", "No more items in the menu"); leave_menu_mode(1); } }
/* Makees custom view of specified type out of menu items. */ static void dump_into_custom_view(int very) { if(menu_to_custom_view(menu, view, very) != 0) { show_error_msg("Menu transformation", "No valid paths discovered in menu content"); return; } leave_menu_mode(1); }
static int key_handler(wchar_t key) { const wchar_t shortcut[] = {key, L'\0'}; if(pass_combination_to_khandler(shortcut) && menu->len == 0) { show_error_msg("No more items in the menu", "Menu will be closed"); leave_menu_mode(1); } return 0; }
static void cmd_dd(key_info_t key_info, keys_info_t *keys_info) { if(menu->key_handler == NULL) return; if(menu->key_handler(menu, L"dd") > 0) wrefresh(menu_win); if(menu->len == 0) { show_error_msg("No more items in the menu", "Menu will be closed"); leave_menu_mode(); } }
static int key_handler(wchar_t key) { wchar_t buf[] = {key, L'\0'}; if(menu->key_handler == NULL) return 0; if(menu->key_handler(menu, buf) > 0) wrefresh(menu_win); if(menu->len == 0) { show_error_msg("No more items in the menu", "Menu will be closed"); leave_menu_mode(); } return 0; }
static int quit_cmd(const cmd_info_t *cmd_info) { leave_menu_mode(1); return 0; }
static void cmd_ctrl_c(key_info_t key_info, keys_info_t *keys_info) { leave_menu_mode(1); }