commit 8965103a4d9dbee7ad28ba6196ba1311e2e9f46d
parent d0d293b8af60a13503d5221280dc0fa23ab75610
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Sun, 1 Apr 2018 11:36:27 +0200
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.
Diffstat:
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git 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];
-
- if (undoing ^ add_indent)
- indent_a_line(line, blanks);
- else
- unindent_a_line(line, strlen(blanks));
+ /* 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];
- line = line->next;
- }
+ if (undoing ^ add_indent)
+ indent_a_line(line, blanks);
+ else
+ unindent_a_line(line, strlen(blanks));
- group = group->next;
+ line = line->next;
}
/* When undoing, reposition the cursor to the recorded location. */