iadd crop-to-visible function (C) - 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 a99759398841d86928c7ad4d8248f907765cbeb2 /scm/gramscii/commit/a99759398841d86928c7ad4d8248f907765cbeb2.gph bitreich.org 70 1parent b38ed132a7df231fc08ce384d8559e6648fdd0cc /scm/gramscii/commit/b38ed132a7df231fc08ce384d8559e6648fdd0cc.gph bitreich.org 70 hAuthor: KatolaZ URL:mailto:katolaz@freaknet.org bitreich.org 70 iDate: Sat, 27 Jul 2019 08:31:24 +0100 Err bitreich.org 70 i Err bitreich.org 70 iadd crop-to-visible function (C) Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M TODO | 2 +- Err bitreich.org 70 i M config.mk | 2 +- Err bitreich.org 70 i M draw.c | 1 + Err bitreich.org 70 i M gramscii.1 | 5 +++++ Err bitreich.org 70 i M gramscii.h | 1 + Err bitreich.org 70 i M screen.c | 30 +++++++++++++++++++++++++++--- Err bitreich.org 70 i Err bitreich.org 70 i6 files changed, 36 insertions(+), 5 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,5 +1,4 @@ Err bitreich.org 70 i + optimize redraws (redraw only the modified rectangle) Err bitreich.org 70 i-+ add crop command (C) 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@@ -25,6 +24,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 crop command (C) Err bitreich.org 70 i * reorganise code Err bitreich.org 70 i * change screen management (i.e., dynamic array of lines) Err bitreich.org 70 i * add action multiplier (e.g., "7h" moves left by 7 cols) Err bitreich.org 70 1diff --git a/config.mk b/config.mk /scm/gramscii/file/config.mk.gph bitreich.org 70 i@@ -2,5 +2,5 @@ PREFIX = /usr/local Err bitreich.org 70 i BINDIR = ${PREFIX}/bin Err bitreich.org 70 i MANDIR = ${PREFIX}/share/man Err bitreich.org 70 i Err bitreich.org 70 i-CFLAGS = -O3 -std=c90 -pedantic -Wall Err bitreich.org 70 i+CFLAGS = -O0 -std=c99 -pedantic -Wall Err bitreich.org 70 i CC = cc Err bitreich.org 70 1diff --git a/draw.c b/draw.c /scm/gramscii/file/draw.c.gph bitreich.org 70 i@@ -303,6 +303,7 @@ void visual_box(FILE *fc){ Err bitreich.org 70 i f = get_key(fc, "fill char: "); /** FALLTHROUGH **/ Err bitreich.org 70 i case 'x':/* erase */ Err bitreich.org 70 i erase_box(orig_x, orig_y, f); Err bitreich.org 70 i+ erase_blank_lines(MIN(y,orig_y), MAX(y, orig_y)); Err bitreich.org 70 i modified = 1; Err bitreich.org 70 i goto vis_exit; Err bitreich.org 70 i break; Err bitreich.org 70 1diff --git a/gramscii.1 b/gramscii.1 /scm/gramscii/file/gramscii.1.gph bitreich.org 70 i@@ -52,6 +52,11 @@ mode: Err bitreich.org 70 i .BI R Err bitreich.org 70 i Redraw the screen Err bitreich.org 70 i .TP 5m Err bitreich.org 70 i+.BI C Err bitreich.org 70 i+Crop chart to the largest non-blank region. The first line and the first Err bitreich.org 70 i+column of the cropped chart will contain the first non-blank line and Err bitreich.org 70 i+the first non-blank column of the original chart, respectively. Err bitreich.org 70 i+.TP 5m Err bitreich.org 70 i .BI q Err bitreich.org 70 i Quit gramscii, and prompt for a filename if the current screen contains Err bitreich.org 70 i unsaved changes. Err bitreich.org 70 1diff --git a/gramscii.h b/gramscii.h /scm/gramscii/file/gramscii.h.gph bitreich.org 70 i@@ -120,6 +120,7 @@ void erase_line(int i); Err bitreich.org 70 i void erase_screen(); Err bitreich.org 70 i void go_to(int where); Err bitreich.org 70 i void crop_to_nonblank(); Err bitreich.org 70 i+void erase_blank_lines(int y1, int y2); 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 1diff --git a/screen.c b/screen.c /scm/gramscii/file/screen.c.gph bitreich.org 70 i@@ -197,6 +197,26 @@ void update_current(){ Err bitreich.org 70 i fflush(stdout); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i+void erase_blank_lines(int y1, int y2){ Err bitreich.org 70 i+ int j; Err bitreich.org 70 i+ if (y1 > y2){ Err bitreich.org 70 i+ y1 ^= y2; Err bitreich.org 70 i+ y2 ^= y1; Err bitreich.org 70 i+ y1 ^= y2; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (; y1 <= y2; y1++){ Err bitreich.org 70 i+ j = screen[y1].lst; Err bitreich.org 70 i+ while (j>=0 && isblank(screen[y1].s[j])) Err bitreich.org 70 i+ j--; Err bitreich.org 70 i+ if (j<0){ Err bitreich.org 70 i+ screen[y1].lst = -1; Err bitreich.org 70 i+ screen[y1].s[0] = '\0'; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ } Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i void erase_line(int i){ Err bitreich.org 70 i screen[i].lst = -1; Err bitreich.org 70 i screen[i].s[0] = '\0'; Err bitreich.org 70 i@@ -446,13 +466,16 @@ void find_nonblank_rect(int *x1, int *y1, int *x2, int *y2){ Err bitreich.org 70 i *y2 = i; Err bitreich.org 70 i if (i < *y1) Err bitreich.org 70 i *y1 = i; Err bitreich.org 70 i- if (screen[i].lst > *x2) Err bitreich.org 70 i- *x2 = screen[i].lst; Err bitreich.org 70 i j = 0; Err bitreich.org 70 i- while(j <= screen[i].lst && isblank(first=screen[i].s[j])) Err bitreich.org 70 i+ while((j <= screen[i].lst) && isblank(first=screen[i].s[j])) Err bitreich.org 70 i j++; Err bitreich.org 70 i if (j < *x1) Err bitreich.org 70 i *x1 = j; Err bitreich.org 70 i+ j = screen[i].lst; Err bitreich.org 70 i+ while(isblank(screen[i].s[j])) Err bitreich.org 70 i+ j--; Err bitreich.org 70 i+ if (j > *x2) Err bitreich.org 70 i+ *x2 = j; Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -478,6 +501,7 @@ void crop_to_nonblank(){ Err bitreich.org 70 i fprintf(stderr, "crop rectangle: (%d, %d)-(%d, %d)\n", x1, y1, x2, y2); Err bitreich.org 70 i #endif Err bitreich.org 70 i crop_to_rect(x1, y1, x2, y2); Err bitreich.org 70 i+ modified=1; Err bitreich.org 70 i redraw(); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 .