From 8965103a4d9dbee7ad28ba6196ba1311e2e9f46d Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@telfort.nl>
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];
-
-			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. */
-- 
GitLab