iadd undo in erase mode - gramscii - A simple editor for ASCII box-and-arrow charts Err bitreich.org 70
1Log /scm/gramscii/log.gph bitreich.org 70
1Files /scm/gramscii/files.gph bitreich.org 70
1Refs /scm/gramscii/refs.gph bitreich.org 70
1Tags /scm/gramscii/tag bitreich.org 70
1README /scm/gramscii/file/README.md.gph bitreich.org 70
1LICENSE /scm/gramscii/file/COPYING.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 08485aacd8d561f2650175b7a16211262396b2ce /scm/gramscii/commit/08485aacd8d561f2650175b7a16211262396b2ce.gph bitreich.org 70
1parent f660595c236a21555d3558dd51afae4a67d651a3 /scm/gramscii/commit/f660595c236a21555d3558dd51afae4a67d651a3.gph bitreich.org 70
hAuthor: KatolaZ <katolaz@freaknet.org> URL:mailto:katolaz@freaknet.org bitreich.org 70
iDate: Thu, 1 Aug 2019 11:26:12 +0100 Err bitreich.org 70
i Err bitreich.org 70
iadd undo in erase mode Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M TODO | 10 +++++----- Err bitreich.org 70
i M draw.c | 16 ++++++++++++++-- Err bitreich.org 70
i M gramscii.1 | 25 ++++++++++++++++++++----- Err bitreich.org 70
i M screen.c | 2 +- Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 40 insertions(+), 13 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/TODO b/TODO /scm/gramscii/file/TODO.gph bitreich.org 70
i@@ -1,9 +1,4 @@ Err bitreich.org 70
i + optimize redraws (redraw only the modified rectangle) Err bitreich.org 70
i-+ undo (by storing lines changed across insert/remove operations) Err bitreich.org 70
i- * re-organise undo-ring management Err bitreich.org 70
i- * add undo for arrow mode Err bitreich.org 70
i- * add undo for text mode Err bitreich.org 70
i- - add undo for erase mode Err bitreich.org 70
i - fix bug with 'g' commands in arrow mode Err bitreich.org 70
i - add screen geometry option (-g 25x80?) Err bitreich.org 70
i - read file at point Err bitreich.org 70
i@@ -23,6 +18,11 @@ Err bitreich.org 70
i - allow scrolling (both vertical and horizontal) Err bitreich.org 70
i - catch SIGWINCH and react appropriately (after scrolling is Err bitreich.org 70
i enabled) Err bitreich.org 70
i+* undo (by storing lines changed across insert/remove operations) Err bitreich.org 70
i+ * re-organise undo-ring management Err bitreich.org 70
i+ * add undo for arrow mode Err bitreich.org 70
i+ * add undo for text mode Err bitreich.org 70
i+ * add undo for erase mode Err bitreich.org 70
i * visual selection Err bitreich.org 70
i * crop-to-rectangle Err bitreich.org 70
i * yank Err bitreich.org 70
1diff --git a/draw.c b/draw.c /scm/gramscii/file/draw.c.gph bitreich.org 70
i@@ -168,7 +168,6 @@ update_box: Err bitreich.org 70
i Err bitreich.org 70
i void draw_arrow(int x, int y, char *a, int a_len, int fix){ Err bitreich.org 70
i Err bitreich.org 70
i- /* FIXME: copy affected lines to undo */ Err bitreich.org 70
i int i, j, cur_dir; Err bitreich.org 70
i char line; Err bitreich.org 70
i void (*f)(int, int, char); Err bitreich.org 70
i@@ -285,13 +284,24 @@ void erase(FILE *fc){ Err bitreich.org 70
i /*FIXME: add affected lines to undo */ Err bitreich.org 70
i char c; Err bitreich.org 70
i int orig_x = x, orig_y = y; Err bitreich.org 70
i+ char first = 1, opened = 0; Err bitreich.org 70
i status_bar(); Err bitreich.org 70
i show_cursor(); Err bitreich.org 70
i- invalidate_undo(); Err bitreich.org 70
i while((c=fgetc(fc))!=EOF && c!=27 && c!= 'x' && c != '\n'){ Err bitreich.org 70
i if (!move_around(c, fc)) continue; Err bitreich.org 70
i check_bound(); Err bitreich.org 70
i+ if (first || Err bitreich.org 70
i+ (y != orig_y && ! opened) || Err bitreich.org 70
i+ (y == orig_y && x != orig_x && !opened) ){ Err bitreich.org 70
i+ copy_lines_to_ring(MIN(y, orig_y), MAX(y, orig_y), PRV_STATE); Err bitreich.org 70
i+ first = 0; Err bitreich.org 70
i+ opened = 1; Err bitreich.org 70
i+ } Err bitreich.org 70
i do_erase(orig_x, orig_y); Err bitreich.org 70
i+ if (y != orig_y && opened){ Err bitreich.org 70
i+ copy_lines_to_ring(MIN(y, orig_y), MAX(y, orig_y), NEW_STATE); Err bitreich.org 70
i+ opened = 0; Err bitreich.org 70
i+ } Err bitreich.org 70
i step = 1; Err bitreich.org 70
i modified = 1; Err bitreich.org 70
i orig_x = x; Err bitreich.org 70
i@@ -300,6 +310,8 @@ void erase(FILE *fc){ Err bitreich.org 70
i status_bar(); Err bitreich.org 70
i show_cursor(); Err bitreich.org 70
i } Err bitreich.org 70
i+ if (opened) Err bitreich.org 70
i+ copy_lines_to_ring(y, y, NEW_STATE); Err bitreich.org 70
i mode = MOVE; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/gramscii.1 b/gramscii.1 /scm/gramscii/file/gramscii.1.gph bitreich.org 70
i@@ -26,6 +26,26 @@ available for further processing. Err bitreich.org 70
i .TP Err bitreich.org 70
i .BI -h Err bitreich.org 70
i Print short usage unstructions and exit. Err bitreich.org 70
i+.PP Err bitreich.org 70
i+If one or more files are provided after the last option, gramscii will Err bitreich.org 70
i+consider them command files and will read them one after the other Err bitreich.org 70
i+(i.e., as if the characters in the file were typed while gramscii was Err bitreich.org 70
i+running), before accepting commands from stdin. This allows to use Err bitreich.org 70
i+gramscii scripts. For instance, if you start gramscii as: Err bitreich.org 70
i+.EX Err bitreich.org 70
i+ Err bitreich.org 70
i+ gramscii file.txt Err bitreich.org 70
i+ Err bitreich.org 70
i+.EE Err bitreich.org 70
i+and "file.txt" contains the lines: Err bitreich.org 70
i+.EX Err bitreich.org 70
i+ Err bitreich.org 70
i+ gg10lbLLJJb Err bitreich.org 70
i+ gg10l15jbLLJJ Err bitreich.org 70
i+ Err bitreich.org 70
i+.EE Err bitreich.org 70
i+then gramscii will show two boxes and then will start accepting Err bitreich.org 70
i+commands as usual. Err bitreich.org 70
i .SH COMMANDS Err bitreich.org 70
i gramscii is a visual modal editor. Commands are associated to Err bitreich.org 70
i keystrokes, and keystrokes have different meaning in different modes. Err bitreich.org 70
i@@ -537,11 +557,6 @@ would automatically save the screen into "filename". Err bitreich.org 70
i gramscii currently manages only a fixed screen of the same size of the Err bitreich.org 70
i screen where it starts from. This will be changed in a future release to Err bitreich.org 70
i support scrolling and "virtual" screens of any (reasonable) size. Err bitreich.org 70
i-.PP Err bitreich.org 70
i-Undo commands are only available in box, visual (cut, fill), arrow, and Err bitreich.org 70
i-text mode, and for copy/paste operations. gramscii currently does Err bitreich.org 70
i-.B not Err bitreich.org 70
i-support undo commands for erase mode. This will be fixed soon. Err bitreich.org 70
i .SH AUTHORS Err bitreich.org 70
i gramscii is written and maintained by Vincenzo "KatolaZ" Nicosia Err bitreich.org 70
i <katolaz@freaknet.org>. You can use, copy, modify, and redistribute Err bitreich.org 70
1diff --git a/screen.c b/screen.c /scm/gramscii/file/screen.c.gph bitreich.org 70
i@@ -445,7 +445,7 @@ void crop_to_rect(int x1, int y1, int x2, int y2){ Err bitreich.org 70
i int i; Err bitreich.org 70
i Err bitreich.org 70
i for (i=0; i<= y2-y1; i ++){ Err bitreich.org 70
i- ensure_line_length(&(screen.l[i]), screen.l[i+y1].lst); Err bitreich.org 70
i+ ensure_line_length(&(screen.l[i]), screen.l[i+y1].lst+1); Err bitreich.org 70
i sprintf(screen.l[i].s, "%s", screen.l[i+y1].s + x1); Err bitreich.org 70
i screen.l[i].lst = screen.l[i+y1].lst - x1; Err bitreich.org 70
i } Err bitreich.org 70
.
Response:
text/plain