From 7f6e62f77bca73e49dfa260ff7ac75770d1363c8 Mon Sep 17 00:00:00 2001 From: KatolaZ Date: Wed, 31 Jul 2019 11:49:06 +0100 Subject: support line-by-line undo in text mode --- draw.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'draw.c') diff --git a/draw.c b/draw.c index e4c3250..1e73719 100644 --- a/draw.c +++ b/draw.c @@ -77,10 +77,13 @@ void get_text(FILE *fc){ int orig_x = x; redraw(); + copy_lines_to_ring(y, y, PRV_STATE); while((c=fgetc(fc))!=EOF && c != 27){ if(c=='\n'){ set_cur(BG); + copy_lines_to_ring(y,y, NEW_STATE); y += 1; + copy_lines_to_ring(y, y, PRV_STATE); x = orig_x; } else { @@ -95,6 +98,8 @@ void get_text(FILE *fc){ status_bar(); show_cursor(); } + if (modified) + copy_lines_to_ring(y, y, NEW_STATE); mode=MOVE; } @@ -245,6 +250,7 @@ update_arrow: show_cursor(); } if (c == 'a' || c == '\n'){ + invalidate_undo(); draw_arrow(orig_x, orig_y, arrow, arrow_len, FIX); modified = 1; } @@ -278,6 +284,7 @@ void erase(FILE *fc){ int orig_x = x, orig_y = y; status_bar(); show_cursor(); + invalidate_undo(); while((c=fgetc(fc))!=EOF && c!=27 && c!= 'x' && c != '\n'){ if (!move_around(c, fc)) continue; check_bound(); -- cgit v1.2.3