static void save_users_input(void) { free(input_stat.line_buf); input_stat.line_buf = my_wcsdup((input_stat.line != NULL) ? input_stat.line : L""); }
/** * Updates the vAdaptor->userData (HVSVPortInfo) with the new switchName, * freeing the old switch name if present. * Updates the countersInstance name for this port. */ void updatePortSwitchName(SFLAdaptor *switchPort, wchar_t *switchName) { HVSVPortInfo *portInfo = (HVSVPortInfo *)switchPort->userData; if (portInfo->switchName != NULL) { my_free(portInfo->switchName); } portInfo->switchName = my_wcsdup(switchName); setPortCountersInstance(switchPort); }
static void restore_user_input(void) { input_stat.cmd_pos = -1; free(input_stat.line); input_stat.line = my_wcsdup(input_stat.line_buf); input_stat.len = wcslen(input_stat.line); update_cmdline(); }
static void do_completion(void) { if(input_stat.complete == NULL) return; if(input_stat.line == NULL) { input_stat.line = my_wcsdup(L""); if(input_stat.line == NULL) return; } line_completion(&input_stat); update_cmdline_size(); update_cmdline_text(); }
static void input_line_changed(void) { static wchar_t *previous; if(!cfg.inc_search || !input_stat.search_mode) return; if(prev_mode != MENU_MODE) { curr_view->top_line = input_stat.old_top; curr_view->list_pos = input_stat.old_pos; } else { load_menu_pos(); } if(input_stat.line == NULL || input_stat.line[0] == L'\0') { if(cfg.hl_search) { clean_selected_files(curr_view); draw_dir_list(curr_view, curr_view->top_line); move_to_list_pos(curr_view, curr_view->list_pos); } free(previous); previous = NULL; } else if(previous == NULL || wcscmp(previous, input_stat.line) != 0) { char *p; free(previous); previous = my_wcsdup(input_stat.line); p = to_multibyte(input_stat.line); if(sub_mode == SEARCH_FORWARD_SUBMODE) exec_command(p, curr_view, GET_FSEARCH_PATTERN); else if(sub_mode == SEARCH_BACKWARD_SUBMODE) exec_command(p, curr_view, GET_BSEARCH_PATTERN); else if(sub_mode == MENU_SEARCH_FORWARD_SUBMODE || sub_mode == MENU_SEARCH_BACKWARD_SUBMODE) search_menu_list(p, sub_mode_ptr); else if(sub_mode == VSEARCH_FORWARD_SUBMODE) exec_command(p, curr_view, GET_VFSEARCH_PATTERN); else if(sub_mode == VSEARCH_BACKWARD_SUBMODE) exec_command(p, curr_view, GET_VBSEARCH_PATTERN); free(p); } if(prev_mode != MENU_MODE) { draw_dir_list(curr_view, curr_view->top_line); move_to_list_pos(curr_view, curr_view->list_pos); } else { menu_redraw(); } }
static void prepare_cmdline_mode(const wchar_t *prompt, const wchar_t *cmd, complete_cmd_func complete) { line_width = getmaxx(stdscr); prev_mode = *mode; *mode = CMDLINE_MODE; input_stat.line = NULL; input_stat.initial_line = NULL; input_stat.index = wcslen(cmd); input_stat.curs_pos = 0; input_stat.len = input_stat.index; input_stat.cmd_pos = -1; input_stat.complete_continue = 0; input_stat.history_search = HIST_NONE; input_stat.line_buf = NULL; input_stat.reverse_completion = 0; input_stat.complete = complete; input_stat.search_mode = 0; input_stat.dot_pos = -1; input_stat.line_edited = 0; if(sub_mode == SEARCH_FORWARD_SUBMODE || sub_mode == VSEARCH_FORWARD_SUBMODE || sub_mode == MENU_SEARCH_FORWARD_SUBMODE || sub_mode == SEARCH_BACKWARD_SUBMODE || sub_mode == VSEARCH_BACKWARD_SUBMODE || sub_mode == MENU_SEARCH_BACKWARD_SUBMODE) { input_stat.search_mode = 1; } if(input_stat.search_mode || sub_mode == FILTER_SUBMODE) { save_view_port(); } wcsncpy(input_stat.prompt, prompt, ARRAY_LEN(input_stat.prompt)); input_stat.prompt_wid = wcslen(input_stat.prompt); input_stat.curs_pos = input_stat.prompt_wid; if(input_stat.len != 0) { input_stat.line = malloc(sizeof(wchar_t)*(input_stat.len + 1)); if(input_stat.line == NULL) { input_stat.index = 0; input_stat.len = 0; input_stat.initial_line = NULL; } else { wcscpy(input_stat.line, cmd); input_stat.curs_pos += wcswidth(input_stat.line, (size_t)-1); input_stat.initial_line = my_wcsdup(input_stat.line); } } curs_set(TRUE); update_cmdline_size(); update_cmdline_text(); curr_stats.save_msg = 1; if(prev_mode == NORMAL_MODE) init_commands(); }
/* 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(); } }