From 8965103a4d9dbee7ad28ba6196ba1311e2e9f46d Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Sun, 1 Apr 2018 11:36:27 +0200 Subject: [PATCH] tweaks: remove the group handling for undoing/redoing (un)indents Indenting/unindenting always happens in a single contiguous block. Lines that cannot or should not be indented or unindented do not need to remembered separately as it follows from their content. --- src/text.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/text.c b/src/text.c index ca246690..a35aa525 100644 --- a/src/text.c +++ b/src/text.c @@ -435,27 +435,25 @@ void do_unindent(void) void handle_indent_action(undo *u, bool undoing, bool add_indent) { undo_group *group = u->grouping; + filestruct *line = fsfromline(group->top_line); + + if (group->next != NULL) + statusline(ALERT, "Multiple groups -- please report a bug"); /* When redoing, reposition the cursor and let the indenter adjust it. */ if (!undoing) goto_line_posx(u->lineno, u->begin); - while (group) { - filestruct *line = fsfromline(group->top_line); + /* For each line in the group, add or remove the individual indent. */ + while (line && line->lineno <= group->bottom_line) { + char *blanks = group->indentations[line->lineno - group->top_line]; - /* For each line in the group, add or remove the individual indent. */ - while (line && line->lineno <= group->bottom_line) { - char *blanks = group->indentations[line->lineno - group->top_line]; + if (undoing ^ add_indent) + indent_a_line(line, blanks); + else + unindent_a_line(line, strlen(blanks)); - if (undoing ^ add_indent) - indent_a_line(line, blanks); - else - unindent_a_line(line, strlen(blanks)); - - line = line->next; - } - - group = group->next; + line = line->next; } /* When undoing, reposition the cursor to the recorded location. */