static int tab_callback(int count, int key) { if (!rl_point) { strip_initial_spaces += tab_width; return 0; } int i; for (i = line_start(rl_point); i < rl_point; i++) { if (rl_line_buffer[i] != ' ') { // do tab completion i = rl_point; rl_complete_internal('!'); if (i < rl_point && rl_line_buffer[rl_point-1] == ' ') { rl_delete_text(rl_point-1, rl_point); rl_point = rl_point-1; } return 0; } } // indent to next tab stop if (suppress_space()) { spaces_suppressed += tab_width; } else { i = line_start(rl_point) + prompt_length; do { rl_insert_text(" "); } while ((rl_point - i) % tab_width); } return 0; }
static int space_callback(int count, int key) { if (!rl_point) strip_initial_spaces++; else if (suppress_space()) spaces_suppressed++; else rl_insert_text(" "); return 0; }