const char * hists_search_last(void) { return hist_is_empty(&curr_stats.search_hist) ? "" : curr_stats.search_hist.items[0]; }
int hist_contains(const hist_t *hist, const char item[]) { if(hist_is_empty(hist)) { return 0; } return is_in_string_array(hist->items, hist->pos + 1, item); }
static void complete_next(const hist_t *hist, size_t len) { if(hist_is_empty(hist)) { return; } if(input_stat.history_search != HIST_SEARCH) { if(input_stat.cmd_pos <= 0) { restore_user_input(); return; } input_stat.cmd_pos--; } else { int pos = input_stat.cmd_pos; int len = input_stat.hist_search_len; while(--pos >= 0) { wchar_t *const buf = to_wide(hist->items[pos]); if(wcsncmp(input_stat.line, buf, len) == 0) { free(buf); break; } free(buf); } if(pos < 0) { restore_user_input(); return; } input_stat.cmd_pos = pos; } (void)replace_input_line(hist->items[input_stat.cmd_pos]); update_cmdline(); if(input_stat.cmd_pos > len - 1) { input_stat.cmd_pos = len - 1; } }
static void complete_prev(const hist_t *hist, size_t len) { if(hist_is_empty(hist)) { return; } if(input_stat.history_search != HIST_SEARCH) { if(input_stat.cmd_pos == hist->pos) return; input_stat.cmd_pos++; } else { int pos = input_stat.cmd_pos; int len = input_stat.hist_search_len; while(++pos <= hist->pos) { wchar_t *buf; buf = to_wide(hist->items[pos]); if(wcsncmp(input_stat.line, buf, len) == 0) { free(buf); break; } free(buf); } if(pos > hist->pos) return; input_stat.cmd_pos = pos; } (void)replace_input_line(hist->items[input_stat.cmd_pos]); update_cmdline(); if(input_stat.cmd_pos > len - 1) { input_stat.cmd_pos = len - 1; } }
/* Inserts last part of previous command to current cursor position. Each next * call will insert last part of older command. */ static void cmd_meta_dot(key_info_t key_info, keys_info_t *keys_info) { wchar_t *wide; if(sub_mode != CMD_SUBMODE) { return; } stop_history_completion(); if(hist_is_empty(&cfg.cmd_hist)) { return; } if(input_stat.dot_pos < 0) { input_stat.dot_pos = input_stat.cmd_pos + 1; } else { remove_previous_dot_completion(); } wide = next_dot_completion(); if(insert_dot_completion(wide) == 0) { update_cmdline_text(); } else { stop_dot_completion(); } free(wide); }
const char * cfg_get_last_search_pattern(void) { return hist_is_empty(&cfg.search_hist) ? "" : cfg.search_hist.items[0]; }