Introduction
Introduction Statistics Contact Development Disclaimer Help
fix read of command scripts and script-mode - gramscii - A simple editor for AS…
Log
Files
Refs
Tags
README
LICENSE
---
commit 0522ef659553292f546fb1f3af43cfd2f4b07bb2
parent a46183e96042cf751199f0a06d437a599f7f5bf8
Author: KatolaZ <[email protected]>
Date: Mon, 12 Aug 2019 09:02:50 +0100
fix read of command scripts and script-mode
Diffstat:
M TODO | 2 +-
M gramscii.1 | 4 ----
M gramscii.c | 28 ++++++++++++++++++----------
M gramscii.h | 2 +-
M lineset.c | 2 +-
M screen.c | 34 +++++++++++++++++------------…
6 files changed, 40 insertions(+), 32 deletions(-)
---
diff --git a/TODO b/TODO
@@ -1,5 +1,4 @@
+ optimize redraws (redraw only the modified rectangle)
-- fix bug in reading commands from files
- add screen geometry option (-g 25x80?)
- maybe move "text" mode to "t"
- implement ellipse
@@ -15,6 +14,7 @@
- allow scrolling (both vertical and horizontal)
- catch SIGWINCH and react appropriately (after scrolling is
enabled)
+* fix bug in reading commands from files
* fix bug in visual crop
* read file at point
* read output of command (!)
diff --git a/gramscii.1 b/gramscii.1
@@ -575,10 +575,6 @@ would automatically save the screen into "filename".
gramscii currently manages only a fixed screen of the same size of the
screen where it starts from. This will be changed in a future release to
support scrolling and "virtual" screens of any (reasonable) size.
-.PP
-There is currently a bug with files read before accepting commands: the
-result of the commands read from the files is not show immediately, and not
-shown correctly.
.SH AUTHORS
gramscii is written and maintained by Vincenzo "KatolaZ" Nicosia
<[email protected]>. You can use, copy, modify, and redistribute
diff --git a/gramscii.c b/gramscii.c
@@ -35,11 +35,12 @@ char *argv0;
void cleanup(int s){
- if (!silent)
+ if (!script){
printf("\033[;H\033[2J");
+ tcsetattr(0, TCSANOW, &t1);
+ }
else
dump_lines(screen, stdout);
- tcsetattr(0, TCSANOW, &t1);
fflush(stdout);
exit(s);
}
@@ -53,11 +54,12 @@ void init(){
signal(SIGTERM, cleanup);
signal(SIGQUIT, cleanup);
- tcgetattr(0, &t1);
- t2 = t1;
- t2.c_lflag &= ~(ICANON | ECHO);
- tcsetattr(0, TCSANOW, &t2);
-
+ if (!script){
+ tcgetattr(0, &t1);
+ t2 = t1;
+ t2.c_lflag &= ~(ICANON | ECHO);
+ tcsetattr(0, TCSANOW, &t2);
+ }
init_screen();
x = 0;
y = 0;
@@ -72,9 +74,12 @@ void init(){
void commands(FILE *fc){
- char c;
+ int c;
while((c=fgetc(fc))!=EOF){
if (!change_style(c) && !move_around(c, fc, 1)){
+#ifdef DEBUG
+ fprintf(stderr, "got command: %c\n", c);
+#endif
switch(c){
case 'i':
mode = TEXT;
@@ -156,7 +161,7 @@ int main(int argc, char *argv[]){
ARGBEGIN {
case 's':
- silent = 1;
+ script = 1;
break;
case 'h': /* FALLTHROUGH */
default:
@@ -171,12 +176,15 @@ int main(int argc, char *argv[]){
}
else {
commands(fc);
+ fflush(fc);
fclose(fc);
redraw();
}
argv++;
argc--;
}
- commands(stdin);
+ if (!script)
+ commands(stdin);
+ cleanup(0);
return 0;
}
diff --git a/gramscii.h b/gramscii.h
@@ -129,7 +129,7 @@ char modified; /* set to 1 if screen modified since last sa…
char fname[256];
-char silent; /* set to 1 in script-mode */
+char script; /* set to 1 in script-mode */
char autoend; /* set to 1 in auto-arrow mode */
/* Used by draw_arrow to identify the bounding box */
diff --git a/lineset.c b/lineset.c
@@ -62,7 +62,7 @@ void ensure_num_lines(lineset_t *ls, int n){
void dump_lines(lineset_t ls, FILE *f){
int i;
for (i=0; i<ls.num ;i++){
- fprintf(f, "%d:%s\n", i, ls.l[i].s);
+ fprintf(f, "%s\n", ls.l[i].s);
}
fflush(f);
}
diff --git a/screen.c b/screen.c
@@ -58,7 +58,7 @@ char get_mark(char dir){
void status_bar(){
- if (silent)
+ if (script)
return;
printf("\033[%d;1f\033[7m", HEIGHT+1);
printf("%*s", WIDTH-1, "");
@@ -78,7 +78,7 @@ void status_bar(){
char get_key(FILE *fc, char *msg){
- if (silent)
+ if (script)
return 0;
printf("\033[%d;1f\033[7m", HEIGHT+1);
printf("%*s", WIDTH, "");
@@ -92,7 +92,7 @@ char get_key(FILE *fc, char *msg){
void get_string(FILE *fc, char *msg, char *s, int sz){
- if (!silent){
+ if (!script){
printf("\033[%d;1f\033[7m", HEIGHT+1);
printf("%*s", WIDTH, "");
printf("\033[%d;1f\033[7m", HEIGHT+1);
@@ -106,9 +106,10 @@ void get_string(FILE *fc, char *msg, char *s, int sz){
}
fgets(s, sz, fc);
s[strlen(s)-1] = '\0';
- tcsetattr(0, TCSANOW, &t2);
- if (!silent)
+ if (!script){
+ tcsetattr(0, TCSANOW, &t2);
fflush(stdout);
+ }
}
int is_yes(char c){
@@ -119,7 +120,7 @@ int is_yes(char c){
void show_cursor(){
- if (silent)
+ if (script)
return;
printf("\033[%d;%df", y+1, x+1);
fflush(stdout);
@@ -144,7 +145,7 @@ void set_cur(char c){
void draw_xy(int x, int y, char c){
/* FIXME: check if x and y are valid!!!! */
- if (silent)
+ if (script)
return;
printf("\033[%d;%df",y+1,x+1);
putchar(c);
@@ -152,7 +153,7 @@ void draw_xy(int x, int y, char c){
}
void update_current(){
- if (silent)
+ if (script)
return;
printf("\033[%d;%df",y+1,x+1);
putchar(screen.l[y].s[x]);
@@ -226,7 +227,7 @@ void reset_styles(){
void redraw(){
int i;
- if (silent)
+ if (script)
return;
printf("\033[2J\033[1;1H");
for (i=0;i<HEIGHT;i++){
@@ -254,9 +255,9 @@ void go_to(int where){
show_cursor();
}
-void handle_goto(char global){
+void handle_goto(FILE *fc, char global){
char c;
- c=getchar();
+ c=fgetc(fc);
switch(c){
case 'h':
dir = DIR_L;
@@ -348,6 +349,9 @@ int move_around(char c, FILE *fc, char global){
mult += c - '0';
return 0;
}
+#ifdef DEBUG
+ fprintf(stderr, "got char: %c\n", c);
+#endif
switch(c){
case 27: /* control sequence? */
c = get_escape(fc);
@@ -382,11 +386,11 @@ int move_around(char c, FILE *fc, char global){
break;
case 'g':
#ifdef DEBUG
- fprintf(stderr, "before global: step: %d x: %d y: %d\n…
+ fprintf(stderr, "before handle_goto: step: %d x: %d y:…
#endif
- handle_goto(global);
+ handle_goto(fc, global);
#ifdef DEBUG
- fprintf(stderr, "after global: step: %d x: %d y: %d\n"…
+ fprintf(stderr, "after handle_goto: step: %d x: %d y: …
#endif
break;
default:
@@ -398,7 +402,7 @@ int move_around(char c, FILE *fc, char global){
void set_video(int v){
- if (silent)
+ if (script)
return;
printf("\033[%dm", v);
fflush(stdout);
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.