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 <katolaz@freaknet.org> 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<HEIGHT; i++){ Err bitreich.org 70
i alloc_line(&(screen.l[i])); Err bitreich.org 70
i } Err bitreich.org 70
i+ /* init markers */ Err bitreich.org 70
i hlines_sz= sizeof(hlines) -1; Err bitreich.org 70
i vlines_sz= sizeof(vlines) -1; Err bitreich.org 70
i corners_sz = sizeof(corners) -1; Err bitreich.org 70
i stmarks_sz = sizeof(st_marks) - 1; Err bitreich.org 70
i endmarks_sz = sizeof(st_marks) - 1; Err bitreich.org 70
i reset_styles(); Err bitreich.org 70
i+ /* init undo ring */ Err bitreich.org 70
i cutbuf.sz = 0; Err bitreich.org 70
i cutbuf.l = NULL; Err bitreich.org 70
i cutbuf.num = 0; Err bitreich.org 70
i- Err bitreich.org 70
i undo = NULL; Err bitreich.org 70
i undo_sz = 0; Err bitreich.org 70
i undo_cur = -2; Err bitreich.org 70
i undo_lst = -2; Err bitreich.org 70
i+ /* init pos marks */ Err bitreich.org 70
i+ memset(mark_map, 0, 26 * sizeof(char)); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i void find_nonblank_rect(int *x1, int *y1, int *x2, int *y2){ Err bitreich.org 70
i@@ -507,4 +528,18 @@ void crop_to_nonblank(){ Err bitreich.org 70
i redraw(); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i+/** position marks **/ Err bitreich.org 70
i Err bitreich.org 70
i+void mark_pos(FILE *fc){ Err bitreich.org 70
i+ Err bitreich.org 70
i+ char c; Err bitreich.org 70
i+ c = tolower(fgetc(fc)); Err bitreich.org 70
i+ if (isalpha(c)){ Err bitreich.org 70
i+ marks[c - 'a'].x = x; Err bitreich.org 70
i+ marks[c - 'a'].y = y; Err bitreich.org 70
i+ mark_map[c - 'a'] = 1; Err bitreich.org 70
i+#ifdef DEBUG Err bitreich.org 70
i+ fprintf(stderr, "marking pos (%d, %d) as '%c'\n", x, y, c); Err bitreich.org 70
i+#endif Err bitreich.org 70
i+ } Err bitreich.org 70
i+} Err bitreich.org 70
.
Response:
text/plain