Introduction
Introduction Statistics Contact Development Disclaimer Help
fix arrow pointer -- toggle start and end markers - gramscii - A simple editor …
Log
Files
Refs
Tags
README
LICENSE
---
commit a2bf8545d73621de7cfa3a06663d1b94fdc668c4
parent 34a0ec991e4985d3ca4719ffc696f681370e14fc
Author: KatolaZ <[email protected]>
Date: Fri, 19 Jul 2019 15:38:14 +0100
fix arrow pointer -- toggle start and end markers
Diffstat:
M TODO | 4 +++-
M gramscii.c | 63 +++++++++++++++++++++++++----…
2 files changed, 54 insertions(+), 13 deletions(-)
---
diff --git a/TODO b/TODO
@@ -1,13 +1,15 @@
+ optimize redraws (i.e., avoid to redraw if possible)
- (?) change cursor shape according to action
- save to file
-- implement arrow
+- implement auto-arrow 'A' (automatic end-char)
+- implement delete 'x' or 'd'
- manage special chars (DEL/CANC) during text insert
(also do not print unmanaged chars!)
- load from file
- insert file at position
- get screen geometry
- allow scrolling (both vertical and horizontal)
+* implement arrow
* set different line styles (done for hl, vl, corner)
* add status bar
* implement box
diff --git a/gramscii.c b/gramscii.c
@@ -23,6 +23,8 @@
#define DIR_D 0x04
#define DIR_L 0x08
+#define DIR_HOR (DIR_R | DIR_L)
+#define DIR_VER (DIR_D | DIR_U)
#define WIDTH 100
#define HEIGHT 25
@@ -54,12 +56,20 @@ char corner;
char hlines[] = {"-~=#@._ "};
char vlines[] = {"|H#@:;i "};
char corners[] = {"+'H#@.\""};
+char st_marks[] = {"+o-|<>^v"};
+char end_marks[] = {">+o-|<^v"};
+
int hlines_sz= sizeof(hlines) -1;
int vlines_sz= sizeof(vlines) -1;
int corners_sz = sizeof(corners) -1;
-int cur_hl, cur_vl, cur_corn;
+int stmarks_sz = sizeof(st_marks) - 1;
+int endmarks_sz = sizeof(st_marks) - 1;
+
+int cur_hl, cur_vl, cur_corn, cur_start, cur_end;
char line_h;
char line_v;
+char mark_st;
+char mark_end;
struct termios t1, t2;
@@ -99,8 +109,11 @@ void init_screen(){
cur_corn = 0;
corner = corners[0];
cur_hl = cur_vl = 0;
+ cur_start = cur_end = 0;
line_h = hlines[cur_hl];
line_v = vlines[cur_vl];
+ mark_st = st_marks[cur_start];
+ mark_end = end_marks[cur_end];
}
char* state_str(){
@@ -123,8 +136,8 @@ char* state_str(){
void status_bar(){
printf("\033[%d;1f\033[7m", HEIGHT+1);
- printf(" x: %3d y: %3d -- mode: %4s hl: %c vl: %c cn: %c %10s",
- x, y, state_str(), line_h, line_v, corner, "");
+ printf(" x: %3d y: %3d -- mode: %4s hl: %c vl: %c cn: %c <: %c >: %c %…
+ x, y, state_str(), line_h, line_v, corner, mark_st, mark_end, …
printf("\033[0m");
}
@@ -297,12 +310,9 @@ int progr_y(int dir){
}
-/* FIXME: fix pointer position */
-/* FIXME: set initial and final markers */
-/* FIXME: draw "corner" as first char after change of dir */
void draw_arrow(int x, int y, char *a, int a_len, int fix){
- int i, j;
+ int i, j, cur_dir;
char line;
void (*f)(int, int, char);
@@ -312,20 +322,31 @@ void draw_arrow(int x, int y, char *a, int a_len, int fix…
else
f = draw_xy;
+ f(x,y,mark_st);
if (!a_len){
- f(x,y,corner);
+ show_cursor();
return;
}
- line = (a[0] & DIR_L) || (a[0] & DIR_R) ? line_h : line_v;
- f(x,y,line);
+ cur_dir=DIR_N;
for (i=0; i<a_len; i+=2){
+ if (i>0) {
+ /* If we are switching between horizontal and vertical…
+ if (((cur_dir & DIR_HOR) && (a[i] & DIR_VER)) ||
+ ((cur_dir & DIR_VER) && (a[i] & DIR_HOR))){
+ f(x,y,corner);
+ show_cursor();
+ }
+ }
for(j=0; j<a[i+1]; j++){
line = (a[i] & DIR_L) || (a[i] & DIR_R) ? line_h : lin…
x += progr_x(a[i]);
y += progr_y(a[i]);
f(x, y, line);
}
+ /* f(x,y,mark_end);*/
+ cur_dir = a[i];
}
+ f(x,y,mark_end);
show_cursor();
}
@@ -345,7 +366,7 @@ void get_arrow(){
redraw();
step = 1;
- //draw_arrow(x,y,NOFIX);
+ draw_arrow(x,y, arrow, 0, NOFIX);
while((c=getchar())!=EOF && c != 27 && c!= 'a'){
switch(c){
case 'H': step = 5;
@@ -417,6 +438,18 @@ void toggle_vline(){
}
+void toggle_st_mark(){
+
+ cur_start = (cur_start + 1 ) % stmarks_sz;
+ mark_st = st_marks[cur_start];
+}
+
+void toggle_end_mark(){
+
+ cur_end = (cur_end+ 1 ) % endmarks_sz;
+ mark_end = end_marks[cur_end];
+}
+
void commands(){
char c;
@@ -467,9 +500,15 @@ void commands(){
case '|':
toggle_vline();
break;
- case '+':
+ case '+':
toggle_corner();
break;
+ case '<':
+ toggle_st_mark();
+ break;
+ case '>':
+ toggle_end_mark();
+ break;
case 'Q':
case 'q':
cleanup(0);
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.