/* Move down to the next history line. */ int rl_get_next_history (int count, int key) { HIST_ENTRY *temp; if (count < 0) return (rl_get_previous_history (-count, key)); if (count == 0) return 0; rl_maybe_replace_line (); /* either not saved by rl_newline or at end of line, so set appropriately. */ if (_rl_history_saved_point == -1 && (rl_point || rl_end)) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; temp = (HIST_ENTRY *)NULL; while (count) { temp = next_history (); if (!temp) break; --count; } if (temp == 0) rl_maybe_unsave_line (); else { rl_replace_from_history (temp, 0); _rl_history_set_point (); } return 0; }
static int up_callback(int count, int key) { reset_indent(); int i = line_start(rl_point); if (i > 0) { int j = line_start(i-1); if (j == 0) rl_point -= prompt_length; rl_point += j - i; if (rl_point >= i) rl_point = i - 1; } else { last_hist_offset = -1; rl_get_previous_history(count, key); rl_point = line_end(0); } return 0; }
/* With an argument, move back that many history lines, else move to the beginning of history. */ int rl_vi_fetch_history (int count, int c) { int current = where_history (); /* Giving an argument of n means we want the nth command in the history file. The command number is interpreted the same way that the bash `history' command does it -- that is, giving an argument count of 450 to this command would get the command listed as number 450 in the output of `history'. */ if (rl_explicit_arg) { int wanted = history_base + current - count; if (wanted <= 0) rl_beginning_of_history (0, 0); else rl_get_previous_history (wanted, c); } else rl_beginning_of_history (count, 0); return (0); }
/* Meta-< goes to the start of the history. */ int rl_beginning_of_history (int count, int key) { return (rl_get_previous_history (1 + where_history (), key)); }