iadd position marks (Ma/g'a) - 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 ce2bfb4d3a49a27bde7c8bbc6c6b1ef6f80054aa /scm/gramscii/commit/ce2bfb4d3a49a27bde7c8bbc6c6b1ef6f80054aa.gph bitreich.org 70 1parent 02c54fe6f289901f5b356ca98a81dec78fef4f36 /scm/gramscii/commit/02c54fe6f289901f5b356ca98a81dec78fef4f36.gph bitreich.org 70 hAuthor: KatolaZ URL:mailto:katolaz@freaknet.org bitreich.org 70 iDate: Fri, 16 Aug 2019 23:43:24 +0100 Err bitreich.org 70 i Err bitreich.org 70 iadd position marks (Ma/g'a) Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M TODO | 2 ++ Err bitreich.org 70 i M gramscii.1 | 48 ++++++++++++++++++++++++------- Err bitreich.org 70 i M gramscii.c | 3 +++ Err bitreich.org 70 i M gramscii.h | 9 +++++++++ Err bitreich.org 70 i M screen.c | 37 ++++++++++++++++++++++++++++++- Err bitreich.org 70 i Err bitreich.org 70 i5 files changed, 88 insertions(+), 11 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,6 +1,7 @@ Err bitreich.org 70 i + optimize redraws (redraw only the modified rectangle) Err bitreich.org 70 i - add screen geometry option (-g 25x80?) Err bitreich.org 70 i - (?)maybe move "text" mode to "t" Err bitreich.org 70 i+- implement trapezium Err bitreich.org 70 i - implement ellipse Err bitreich.org 70 i - (?) filled box (B) Err bitreich.org 70 i - (?) manage filled box character (as for other styles) Err bitreich.org 70 i@@ -13,6 +14,7 @@ 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+* add position marks (Ma / g'a) Err bitreich.org 70 i * implement comment (#: ignore everything until the end of the line) Err bitreich.org 70 i * implement parallelogram mode (z/Z) Err bitreich.org 70 i * fix bug in reading commands from files Err bitreich.org 70 1diff --git a/gramscii.1 b/gramscii.1 /scm/gramscii/file/gramscii.1.gph bitreich.org 70 i@@ -86,6 +86,17 @@ command). Err bitreich.org 70 i Load (edit) an existing file from disk, discarding any change to the Err bitreich.org 70 i current screen. Err bitreich.org 70 i .TP 5m Err bitreich.org 70 i+.BI M a Err bitreich.org 70 i+Mark (label) the current cursor position as 'a'. The label 'a' must be Err bitreich.org 70 i+one of the 26 ASCII alphabetic characters. The cursor can be moved to a Err bitreich.org 70 i+previously marked position using the global positioning command Err bitreich.org 70 i+.B g Err bitreich.org 70 i+(see below). Position marks are case-insensitive, meaning that both Err bitreich.org 70 i+.I 'c' Err bitreich.org 70 i+and Err bitreich.org 70 i+.I 'C' Err bitreich.org 70 i+indicate the same mark. Err bitreich.org 70 i+.TP 5m Err bitreich.org 70 i .BI N Err bitreich.org 70 i Start a new empty screen. If the current screen has been modified since Err bitreich.org 70 i the last Err bitreich.org 70 i@@ -178,11 +189,13 @@ units at a time (defaults to 5, change LONG_STEP in config.h as you Err bitreich.org 70 i wish). Err bitreich.org 70 i .TP 5m Err bitreich.org 70 i .BI g Err bitreich.org 70 i-Initiate a global positioning command (go). These are two-letter Err bitreich.org 70 i-commands starting with a Err bitreich.org 70 i+Initiate a global positioning command (go). These are two- or Err bitreich.org 70 i+three-letter commands starting with a Err bitreich.org 70 i .BI g Err bitreich.org 70 i-and followed by a direction command or by a character that indicates a Err bitreich.org 70 i-global position, namely: Err bitreich.org 70 i+and followed by a direction command, or by a character that indicates a Err bitreich.org 70 i+global position, or by a valid position mark previously defined with Err bitreich.org 70 i+.B M Err bitreich.org 70 i+and preceded by a single quote. In particular: Err bitreich.org 70 i .RS Err bitreich.org 70 i .TP 5m Err bitreich.org 70 i .BI h Err bitreich.org 70 i@@ -205,9 +218,24 @@ move the cursor to the bottom-right corner of the screen Err bitreich.org 70 i .TP 5m Err bitreich.org 70 i .BI m Err bitreich.org 70 i move the cursor to the middle of the screen. Err bitreich.org 70 i+.TP 5m Err bitreich.org 70 i+.BI 'a Err bitreich.org 70 i+(single-quote followed by a character) move the cursor to the position Err bitreich.org 70 i+previously marked (labelled) with character Err bitreich.org 70 i+.BI 'a' Err bitreich.org 70 i+by the command Err bitreich.org 70 i+.B M Err bitreich.org 70 i+(mark). The character 'a' must be one of the 26 ASCII alphabetic Err bitreich.org 70 i+characters. Notice that position marks are case-insensitive, so the two Err bitreich.org 70 i+commands: Err bitreich.org 70 i+.B g'b Err bitreich.org 70 i+and Err bitreich.org 70 i+.B g'B Err bitreich.org 70 i+move the cursor to the position mark associated to the letter 'b', if it Err bitreich.org 70 i+exists. Err bitreich.org 70 i .PP Err bitreich.org 70 i-For instance, if you want to move the cursor to the first row of the Err bitreich.org 70 i-current column, you would use the two-letter command Err bitreich.org 70 i+If you want to move the cursor to the first row of the current Err bitreich.org 70 i+column, you could use the two-letter command Err bitreich.org 70 i .B gk Err bitreich.org 70 i (which can be read as "go-up"). Similarly, the command Err bitreich.org 70 i .B gh Err bitreich.org 70 i@@ -227,13 +255,13 @@ is equivalent to Err bitreich.org 70 i ). Err bitreich.org 70 i .PP Err bitreich.org 70 i Global positioning commands are available in Err bitreich.org 70 i-.B box, arrow, visual, Err bitreich.org 70 i+.B box, arrow, visual, parallelogram, Err bitreich.org 70 i and Err bitreich.org 70 i .B erase Err bitreich.org 70 i mode. Notice that Err bitreich.org 70 i-.B gg, gG, Err bitreich.org 70 i-and Err bitreich.org 70 i-.B gm, Err bitreich.org 70 i+.B gg, gG, gm Err bitreich.org 70 i+and moves to position marks like Err bitreich.org 70 i+.B g'b, Err bitreich.org 70 i are not available in Err bitreich.org 70 i .B arrow Err bitreich.org 70 i mode. Err bitreich.org 70 1diff --git a/gramscii.c b/gramscii.c /scm/gramscii/file/gramscii.c.gph bitreich.org 70 i@@ -142,6 +142,9 @@ void commands(FILE *fc){ Err bitreich.org 70 i mode = REM; Err bitreich.org 70 i get_comment(fc); Err bitreich.org 70 i break; Err bitreich.org 70 i+ case 'M': Err bitreich.org 70 i+ mark_pos(fc); Err bitreich.org 70 i+ break; Err bitreich.org 70 i case 'q': Err bitreich.org 70 i check_modified(fc);/** FALLTHROUGH **/ Err bitreich.org 70 i case 'Q': Err bitreich.org 70 1diff --git a/gramscii.h b/gramscii.h /scm/gramscii/file/gramscii.h.gph bitreich.org 70 i@@ -90,6 +90,11 @@ typedef struct{ Err bitreich.org 70 i line_t *l; Err bitreich.org 70 i } lineset_t; Err bitreich.org 70 i Err bitreich.org 70 i+typedef struct{ Err bitreich.org 70 i+ int x; Err bitreich.org 70 i+ int y; Err bitreich.org 70 i+} pos_t; Err bitreich.org 70 i+ Err bitreich.org 70 i Err bitreich.org 70 i /** MACROS **/ Err bitreich.org 70 i Err bitreich.org 70 i@@ -105,6 +110,9 @@ 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+pos_t marks[26]; /* position marks */ Err bitreich.org 70 i+char mark_map[26]; /* marks map */ Err bitreich.org 70 i+ 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@@ -175,6 +183,7 @@ 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 int _isblank(int c); Err bitreich.org 70 i+void mark_pos(FILE *fc); Err bitreich.org 70 i /**/ Err bitreich.org 70 i Err bitreich.org 70 i /** drawing-related functions **/ Err bitreich.org 70 1diff --git a/screen.c b/screen.c /scm/gramscii/file/screen.c.gph bitreich.org 70 i@@ -301,6 +301,24 @@ void handle_goto(FILE *fc, char global){ Err bitreich.org 70 i go_to(MIDDLE); Err bitreich.org 70 i } else step = 0; Err bitreich.org 70 i break; Err bitreich.org 70 i+ case '\'': Err bitreich.org 70 i+ c = tolower(fgetc(fc)); Err bitreich.org 70 i+ if (global) { Err bitreich.org 70 i+ dir = DIR_N; Err bitreich.org 70 i+ if (isalpha(c) && mark_map[c - 'a']){ Err bitreich.org 70 i+ x = marks[c - 'a'].x; Err bitreich.org 70 i+ y = marks[c - 'a'].y; Err bitreich.org 70 i+#ifdef DEBUG Err bitreich.org 70 i+ fprintf(stderr, "going to valid mark '%c' (%d, %d)\n", c, x, y); Err bitreich.org 70 i+#endif Err bitreich.org 70 i+ } Err bitreich.org 70 i+#ifdef DEBUG Err bitreich.org 70 i+ else Err bitreich.org 70 i+ fprintf(stderr, "invalid mark '%c'\n", c); Err bitreich.org 70 i+#endif Err bitreich.org 70 i+ } else step = 0; Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i #ifdef DEBUG Err bitreich.org 70 i@@ -435,20 +453,23 @@ void init_screen(){ Err bitreich.org 70 i for (i=0; i