static void cmd_ctrl_h(key_info_t key_info, keys_info_t *keys_info) { input_stat.history_search = HIST_NONE; stop_completion(); if(input_stat.index == 0 && input_stat.len == 0 && sub_mode != PROMPT_SUBMODE) { cmd_ctrl_c(key_info, keys_info); return; } if(input_stat.index == 0) return; if(input_stat.index == input_stat.len) { input_stat.index--; input_stat.len--; input_stat.curs_pos -= wcwidth(input_stat.line[input_stat.index]); input_stat.line[input_stat.index] = L'\0'; } else { input_stat.index--; input_stat.len--; input_stat.curs_pos -= wcwidth(input_stat.line[input_stat.index]); wcsdel(input_stat.line, input_stat.index + 1, 1); } update_cmdline_text(); }
/* Handles backspace. */ static void cmd_ctrl_h(key_info_t key_info, keys_info_t *keys_info) { input_stat.history_search = HIST_NONE; stop_completion(); if(should_quit_on_backspace()) { cmd_ctrl_c(key_info, keys_info); return; } if(input_stat.index == 0) { return; } input_stat.index--; input_stat.len--; input_stat.curs_pos -= vifm_wcwidth(input_stat.line[input_stat.index]); if(input_stat.index == input_stat.len) { input_stat.line[input_stat.index] = L'\0'; } else { wcsdel(input_stat.line, input_stat.index + 1, 1); } update_cmdline_text(); }
static void cmd_delete(key_info_t key_info, keys_info_t *keys_info) { input_stat.history_search = HIST_NONE; stop_completion(); if(input_stat.index == input_stat.len) return; wcsdel(input_stat.line, input_stat.index+1, 1); input_stat.len--; update_cmdline_text(); }
/* Handler of Ctrl-W shortcut, which remove all to the left until beginning of * the word is found (i.e. until first delimiter character). */ static void cmd_ctrl_w(key_info_t key_info, keys_info_t *keys_info) { int old; input_stat.history_search = HIST_NONE; stop_completion(); old = input_stat.index; while(input_stat.index > 0 && iswspace(input_stat.line[input_stat.index - 1])) { input_stat.curs_pos -= vifm_wcwidth(input_stat.line[input_stat.index - 1]); input_stat.index--; } if(iswalnum(input_stat.line[input_stat.index - 1])) { while(input_stat.index > 0 && iswalnum(input_stat.line[input_stat.index - 1])) { const wchar_t curr_wchar = input_stat.line[input_stat.index - 1]; input_stat.curs_pos -= vifm_wcwidth(curr_wchar); input_stat.index--; } } else { while(input_stat.index > 0 && !iswalnum(input_stat.line[input_stat.index - 1]) && !iswspace(input_stat.line[input_stat.index - 1])) { const wchar_t curr_wchar = input_stat.line[input_stat.index - 1]; input_stat.curs_pos -= vifm_wcwidth(curr_wchar); input_stat.index--; } } if(input_stat.index != old) { wcsdel(input_stat.line, input_stat.index + 1, old - input_stat.index); input_stat.len -= old - input_stat.index; } update_cmdline_text(); }
static void cmd_meta_d(key_info_t key_info, keys_info_t *keys_info) { int old_i, old_c; old_i = input_stat.index; old_c = input_stat.curs_pos; find_next_word(); if(input_stat.index == old_i) { return; } wcsdel(input_stat.line, old_i + 1, input_stat.index - old_i); input_stat.len -= input_stat.index - old_i; input_stat.index = old_i; input_stat.curs_pos = old_c; update_cmdline_text(); }
static void cmd_ctrl_u(key_info_t key_info, keys_info_t *keys_info) { input_stat.history_search = HIST_NONE; stop_completion(); if(input_stat.index == 0) return; input_stat.len -= input_stat.index; input_stat.curs_pos = input_stat.prompt_wid; wcsdel(input_stat.line, 1, input_stat.index); input_stat.index = 0; werase(status_bar); mvwaddwstr(status_bar, 0, 0, input_stat.prompt); mvwaddwstr(status_bar, 0, input_stat.prompt_wid, input_stat.line); update_cmdline_text(); }