static void leave_cmdline_mode(void) { int attr; if(getmaxy(status_bar) > 1) { curr_stats.need_update = UT_FULL; wresize(status_bar, 1, getmaxx(stdscr) - FIELDS_WIDTH); mvwin(status_bar, getmaxy(stdscr) - 1, 0); if(prev_mode == MENU_MODE) { wresize(menu_win, getmaxy(stdscr) - 1, getmaxx(stdscr)); update_menu(); } } else { wresize(status_bar, 1, getmaxx(stdscr) - FIELDS_WIDTH); } curs_set(FALSE); curr_stats.save_msg = 0; free(input_stat.line); free(input_stat.initial_line); free(input_stat.line_buf); clean_status_bar(); if(*mode == CMDLINE_MODE) *mode = prev_mode; if(*mode != MENU_MODE) update_pos_window(curr_view); attr = cfg.cs.color[CMD_LINE_COLOR].attr; wattroff(status_bar, COLOR_PAIR(DCOLOR_BASE + CMD_LINE_COLOR) | attr); if(prev_mode != MENU_MODE && prev_mode != VIEW_MODE) { redraw_current_view(); } }
/* Initiates leaving of command-line mode and reverting related changes in other * parts of the interface. */ static void cmd_ctrl_c(key_info_t key_info, keys_info_t *keys_info) { stop_completion(); werase(status_bar); wnoutrefresh(status_bar); if(input_stat.line != NULL) { char *mbstr = to_multibyte(input_stat.line); save_input_to_history(keys_info, mbstr); free(mbstr); input_stat.line[0] = L'\0'; } if(sub_mode != FILTER_SUBMODE) { input_line_changed(); } leave_cmdline_mode(); if(prev_mode == VISUAL_MODE) { if(!input_stat.search_mode) { leave_visual_mode(curr_stats.save_msg, 1, 1); move_to_list_pos(curr_view, check_mark_directory(curr_view, '<')); } } if(sub_mode == CMD_SUBMODE) { curr_stats.save_msg = exec_commands("", curr_view, GET_COMMAND); } else if(sub_mode == FILTER_SUBMODE) { local_filter_cancel(curr_view); curr_view->top_line = input_stat.old_top; curr_view->list_pos = input_stat.old_pos; redraw_current_view(); } }
void leave_view_mode(void) { vle_mode_set(NORMAL_MODE, VMT_PRIMARY); if(curr_view->explore_mode) { curr_view->explore_mode = 0; redraw_current_view(); } else { quick_view_file(curr_view); } ui_view_title_update(curr_view); reset_view_info(vi); if(curr_view->explore_mode || other_view->explore_mode) { view_redraw(); } }
/* Callback-like function, which is called every time input line is changed. */ static void input_line_changed(void) { static wchar_t *previous; if(!cfg.inc_search || (!input_stat.search_mode && sub_mode != FILTER_SUBMODE)) return; set_view_port(); if(input_stat.line == NULL || input_stat.line[0] == L'\0') { if(cfg.hl_search) { /* clear selection */ if(prev_mode != MENU_MODE) { clean_selected_files(curr_view); } else { search_menu_list("", sub_mode_ptr); } } free(previous); previous = NULL; if(sub_mode == FILTER_SUBMODE) { set_local_filter(""); } } else if(previous == NULL || wcscmp(previous, input_stat.line) != 0) { char *mbinput; free(previous); previous = my_wcsdup(input_stat.line); mbinput = to_multibyte(input_stat.line); switch(sub_mode) { case SEARCH_FORWARD_SUBMODE: exec_command(mbinput, curr_view, GET_FSEARCH_PATTERN); break; case SEARCH_BACKWARD_SUBMODE: exec_command(mbinput, curr_view, GET_BSEARCH_PATTERN); break; case VSEARCH_FORWARD_SUBMODE: exec_command(mbinput, curr_view, GET_VFSEARCH_PATTERN); break; case VSEARCH_BACKWARD_SUBMODE: exec_command(mbinput, curr_view, GET_VBSEARCH_PATTERN); break; case MENU_SEARCH_FORWARD_SUBMODE: case MENU_SEARCH_BACKWARD_SUBMODE: search_menu_list(mbinput, sub_mode_ptr); break; case FILTER_SUBMODE: set_local_filter(mbinput); break; default: assert("Unexpected filter type."); break; } free(mbinput); } if(prev_mode != MENU_MODE && prev_mode != VISUAL_MODE) { redraw_current_view(); } else if(prev_mode != VISUAL_MODE) { menu_redraw(); } }