nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

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:
Msrc/text.c | 26++++++++++++--------------
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. */