iadd undo in arrow 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 f660595c236a21555d3558dd51afae4a67d651a3 /scm/gramscii/commit/f660595c236a21555d3558dd51afae4a67d651a3.gph bitreich.org 70
1parent 47996e708ad2ab7e6a18633576c95e93d08e816a /scm/gramscii/commit/47996e708ad2ab7e6a18633576c95e93d08e816a.gph bitreich.org 70
hAuthor: KatolaZ <katolaz@freaknet.org> URL:mailto:katolaz@freaknet.org bitreich.org 70
iDate: Thu, 1 Aug 2019 09:56:13 +0100 Err bitreich.org 70
i Err bitreich.org 70
iadd undo in arrow mode Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M TODO | 14 +++++++------- Err bitreich.org 70
i M draw.c | 7 +++++-- Err bitreich.org 70
i M gramscii.1 | 6 +++--- Err bitreich.org 70
i M gramscii.h | 57 +++++++++++++++++++++---------- Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 54 insertions(+), 30 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,8 +1,8 @@ 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 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@@ -18,16 +18,16 @@ Err bitreich.org 70
i + parse arrows (text-mode will allow movements as well) Err bitreich.org 70
i - (?) implement CTRL+G as abort (aside ESC) Err bitreich.org 70
i - (?) remove extra blanks until EOL when saving to file Err bitreich.org 70
i-+ visual selection Err bitreich.org 70
i- - crop-to Err bitreich.org 70
i- * yank Err bitreich.org 70
i- * fill Err bitreich.org 70
i- * cut Err bitreich.org 70
i - manage special chars (DEL/CANC) during text insert Err bitreich.org 70
i (also do not print unmanaged chars!) 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+* visual selection Err bitreich.org 70
i+ * crop-to-rectangle Err bitreich.org 70
i+ * yank Err bitreich.org 70
i+ * fill Err bitreich.org 70
i+ * cut Err bitreich.org 70
i * put yanked content (p) Err bitreich.org 70
i * turn screen into a lineset Err bitreich.org 70
i * change alloc/ensure functions to work on line_t* and lineset_t* Err bitreich.org 70
1diff --git a/draw.c b/draw.c /scm/gramscii/file/draw.c.gph bitreich.org 70
i@@ -173,7 +173,7 @@ void draw_arrow(int x, int y, char *a, int a_len, int fix){ Err bitreich.org 70
i char line; Err bitreich.org 70
i void (*f)(int, int, char); Err bitreich.org 70
i Err bitreich.org 70
i- Err bitreich.org 70
i+ a_miny = a_maxy = y; Err bitreich.org 70
i if (fix == FIX) Err bitreich.org 70
i f = set_xy; Err bitreich.org 70
i else Err bitreich.org 70
i@@ -198,6 +198,8 @@ void draw_arrow(int x, int y, char *a, int a_len, int fix){ Err bitreich.org 70
i line = (a[i] & DIR_L) || (a[i] & DIR_R) ? line_h : line_v; Err bitreich.org 70
i x += progr_x(a[i]); Err bitreich.org 70
i y += progr_y(a[i]); Err bitreich.org 70
i+ if (y < a_miny) a_miny = y; Err bitreich.org 70
i+ if (y > a_maxy) a_maxy = y; Err bitreich.org 70
i f(x, y, line); Err bitreich.org 70
i } Err bitreich.org 70
i /* f(x,y,mark_end);*/ Err bitreich.org 70
i@@ -250,8 +252,9 @@ update_arrow: Err bitreich.org 70
i show_cursor(); Err bitreich.org 70
i } Err bitreich.org 70
i if (c == 'a' || c == '\n'){ Err bitreich.org 70
i- invalidate_undo(); Err bitreich.org 70
i+ copy_lines_to_ring(a_miny, a_maxy, PRV_STATE); Err bitreich.org 70
i draw_arrow(orig_x, orig_y, arrow, arrow_len, FIX); Err bitreich.org 70
i+ copy_lines_to_ring(a_miny, a_maxy, NEW_STATE); Err bitreich.org 70
i modified = 1; Err bitreich.org 70
i } Err bitreich.org 70
i redraw(); Err bitreich.org 70
1diff --git a/gramscii.1 b/gramscii.1 /scm/gramscii/file/gramscii.1.gph bitreich.org 70
i@@ -538,10 +538,10 @@ 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), and text Err bitreich.org 70
i-mode, and for copy/paste operations. gramscii currently does 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 arrow and erase mode. This will be fixed soon. 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/gramscii.h b/gramscii.h /scm/gramscii/file/gramscii.h.gph bitreich.org 70
i@@ -9,13 +9,16 @@ Err bitreich.org 70
i Err bitreich.org 70
i /** constants **/ Err bitreich.org 70
i Err bitreich.org 70
i+/* modes */ Err bitreich.org 70
i #define MOVE 0x00 Err bitreich.org 70
i #define BOX 0x01 Err bitreich.org 70
i #define ARROW 0x02 Err bitreich.org 70
i #define TEXT 0x04 Err bitreich.org 70
i #define DEL 0x08 Err bitreich.org 70
i #define VIS 0x10 Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i+/* directions */ Err bitreich.org 70
i #define DIR_N 0x00 Err bitreich.org 70
i #define DIR_R 0x01 Err bitreich.org 70
i #define DIR_U 0x02 Err bitreich.org 70
i@@ -24,11 +27,12 @@ Err bitreich.org 70
i Err bitreich.org 70
i #define DIR_HOR (DIR_R | DIR_L) Err bitreich.org 70
i #define DIR_VER (DIR_D | DIR_U) Err bitreich.org 70
i- Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i #define NOFIX 0x0 Err bitreich.org 70
i #define FIX 0x1 Err bitreich.org 70
i Err bitreich.org 70
i+/* markers */ Err bitreich.org 70
i #define BG ' ' Err bitreich.org 70
i #define PTR '+' Err bitreich.org 70
i #define UND '_' Err bitreich.org 70
i@@ -36,21 +40,28 @@ Err bitreich.org 70
i #define ARR_R '>' Err bitreich.org 70
i #define ARR_U '^' Err bitreich.org 70
i #define ARR_D 'v' Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i+/* global positions */ Err bitreich.org 70
i #define HOME 0x01 Err bitreich.org 70
i #define END 0x02 Err bitreich.org 70
i #define MIDDLE 0x04 Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i+/* video modes */ Err bitreich.org 70
i #define VIDEO_NRM 0 Err bitreich.org 70
i #define VIDEO_REV 7 Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i+/* undo buffer elem types */ Err bitreich.org 70
i #define PRV_STATE 0x01 Err bitreich.org 70
i #define NEW_STATE 0x02 Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i /** types **/ Err bitreich.org 70
i Err bitreich.org 70
i typedef struct{ Err bitreich.org 70
i- int sz;/* allocated size*/ Err bitreich.org 70
i+ int sz;/* allocated size */ Err bitreich.org 70
i int n;/* line number */ Err bitreich.org 70
i int lst;/* last visible char (before the first \0) */ Err bitreich.org 70
i char *s; Err bitreich.org 70
i@@ -75,45 +86,52 @@ typedef struct{ Err bitreich.org 70
i Err bitreich.org 70
i /** global variables **/ Err bitreich.org 70
i Err bitreich.org 70
i-lineset_t screen; Err bitreich.org 70
i-lineset_t cutbuf; Err bitreich.org 70
i-lineset_t *undo; Err bitreich.org 70
i+lineset_t screen; /* what is visualised */ Err bitreich.org 70
i+lineset_t cutbuf; /* cut/paste buffer */ Err bitreich.org 70
i+lineset_t *undo; /* undo list */ Err bitreich.org 70
i Err bitreich.org 70
i-int undo_sz; Err bitreich.org 70
i-int undo_cur; Err bitreich.org 70
i-int undo_lst; Err bitreich.org 70
i+int undo_sz;/* allocated size of undo list*/ Err bitreich.org 70
i+int undo_cur;/* undo position */ Err bitreich.org 70
i+int undo_lst;/* last valid undo position */ Err bitreich.org 70
i Err bitreich.org 70
i int WIDTH, HEIGHT; Err bitreich.org 70
i Err bitreich.org 70
i-int mode; Err bitreich.org 70
i-int dir; Err bitreich.org 70
i+int mode;/* mode */ Err bitreich.org 70
i+int dir;/* line direction */ Err bitreich.org 70
i int x; Err bitreich.org 70
i int y; Err bitreich.org 70
i-int step; Err bitreich.org 70
i-int mult; Err bitreich.org 70
i+int step;/* current step */ Err bitreich.org 70
i+int mult;/* current multiplier */ Err bitreich.org 70
i int force_new; Err bitreich.org 70
i-char cursor; Err bitreich.org 70
i char corner; Err bitreich.org 70
i Err bitreich.org 70
i+/* number of available markers for each type */ Err bitreich.org 70
i int hlines_sz; Err bitreich.org 70
i int vlines_sz; Err bitreich.org 70
i int corners_sz; Err bitreich.org 70
i int stmarks_sz; Err bitreich.org 70
i int endmarks_sz; Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i+/* line and arrow markers */ Err bitreich.org 70
i int cur_hl, cur_vl, cur_corn, cur_start, cur_end; Err bitreich.org 70
i char line_h; Err bitreich.org 70
i char line_v; Err bitreich.org 70
i char mark_st; Err bitreich.org 70
i char mark_end; Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i-char modified; Err bitreich.org 70
i+char modified; /* set to 1 if screen modified since last save */ Err bitreich.org 70
i char fname[256]; Err bitreich.org 70
i Err bitreich.org 70
i-char visual; Err bitreich.org 70
i-char silent; Err bitreich.org 70
i-char autoend; Err bitreich.org 70
i Err bitreich.org 70
i+char silent; /* set to 1 in script-mode */ Err bitreich.org 70
i+char autoend; /* set to 1 in auto-arrow mode */ Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Used by draw_arrow to identify the bounding box */ Err bitreich.org 70
i+int a_miny; Err bitreich.org 70
i+int a_maxy; Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i struct termios t1, t2, t3; Err bitreich.org 70
i Err bitreich.org 70
i@@ -141,6 +159,7 @@ void go_to(int where); Err bitreich.org 70
i void crop_to_nonblank(); Err bitreich.org 70
i void crop_to_rect(); Err bitreich.org 70
i void erase_blank_lines(int y1, int y2); Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i /** drawing-related functions **/ Err bitreich.org 70
i int change_style(char c); Err bitreich.org 70
i@@ -152,15 +171,16 @@ void visual_box(FILE *fc); Err bitreich.org 70
i void paste(); Err bitreich.org 70
i void undo_change(); Err bitreich.org 70
i void redo_change(); Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i /** file-related functions **/ Err bitreich.org 70
i void write_file(FILE *fc); Err bitreich.org 70
i void check_modified(FILE *fc); Err bitreich.org 70
i void load_file(FILE *fc); Err bitreich.org 70
i void new_file(FILE *fc); Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i /** line-related functions **/ Err bitreich.org 70
i- Err bitreich.org 70
i void dump_lines(lineset_t ls, FILE *f); Err bitreich.org 70
i void alloc_line(line_t *l); Err bitreich.org 70
i void ensure_line_length(line_t *l, int len); Err bitreich.org 70
i@@ -169,5 +189,6 @@ void yank_region(int x1, int y1, int x2, int y2); Err bitreich.org 70
i void paste_region(int x1, int y1); Err bitreich.org 70
i void copy_lines_to_ring(int y1, int y2, int which); Err bitreich.org 70
i void invalidate_undo(); Err bitreich.org 70
i+/**/ Err bitreich.org 70
i Err bitreich.org 70
i #endif Err bitreich.org 70
.
Response:
text/plain