Browse Source

moved term.hidec in term.c for consistency, put back delay in xbell()

along with duration in config.h, factored some code in tnew()/treset()
and cleaned some code.
Aurélien Aptel 14 years ago
parent
commit
2181040594
2 changed files with 21 additions and 28 deletions
  1. 1 0
      config.h
  2. 20 28
      st.c

+ 1 - 0
config.h

@@ -30,6 +30,7 @@ static const char *colorname[] = {
 #define DefaultBG 0
 #define DefaultCS 1
 #define BellCol   DefaultFG
+#define BellTime  30000 /* microseconds */
 
 /* special keys */
 static Key key[] = {

+ 20 - 28
st.c

@@ -67,6 +67,7 @@ typedef struct {
 	Glyph attr;	 /* current char attributes */
 	int x;
 	int y;
+	char hide;
 } TCursor;
 
 /* CSI Escape sequence structs */
@@ -86,7 +87,6 @@ typedef struct {
 	int col;	/* nb col */
 	Line* line; /* screen */
 	TCursor c;	/* cursor */
-	char hidec;
 	int top;	/* top	  scroll limit */
 	int bot;	/* bottom scroll limit */
 	int mode;	/* terminal mode flags */
@@ -221,17 +221,16 @@ die(const char *errstr, ...) {
 void
 execsh(void) {
 	char *args[3] = {getenv("SHELL"), "-i", NULL};
-	DEFAULT(args[0], "/bin/sh"); /* default shell if getenv() failed */
+	DEFAULT(args[0], "/bin/sh"); /* if getenv() failed */
 	putenv("TERM=" TNAME);
 	execvp(args[0], args);
 }
 
 void
-xbell(void) { /* visual bell */
-	XRectangle r = { BORDER, BORDER, xw.bufw, xw.bufh };
+xbell(void) {
 	XSetForeground(xw.dis, dc.gc, dc.col[BellCol]);
-	XFillRectangles(xw.dis, xw.win, dc.gc, &r, 1);
-	/* usleep(30000); */
+	XFillRectangle(xw.dis, xw.win, dc.gc, BORDER, BORDER, xw.bufw, xw.bufh);
+	usleep(BellTime);
 	draw(SCREEN_REDRAW);
 }
 
@@ -325,11 +324,12 @@ tcursor(int mode) {
 
 void
 treset(void) {
-	term.c.attr.mode = ATTR_NULL;
-	term.c.attr.fg = DefaultFG;
-	term.c.attr.bg = DefaultBG;
-	term.c.x = term.c.y = 0;
-	term.hidec = 0;
+	term.c = (TCursor){{
+		.mode = ATTR_NULL, 
+		.fg = DefaultFG, 
+		.bg = DefaultBG
+	}, .x = 0, .y = 0, .hide = 0};
+	
 	term.top = 0, term.bot = term.row - 1;
 	term.mode = MODE_WRAP;
 	tclearregion(0, 0, term.col-1, term.row-1);
@@ -337,21 +337,13 @@ treset(void) {
 
 void
 tnew(int col, int row) {
-	/* screen size */
+	/* set screen size */
 	term.row = row, term.col = col;
-	term.top = 0, term.bot = term.row - 1;
-	/* mode */
-	term.mode = MODE_WRAP;
-	/* cursor */
-	term.c.attr.mode = ATTR_NULL;
-	term.c.attr.fg = DefaultFG;
-	term.c.attr.bg = DefaultBG;
-	term.c.x = term.c.y = 0;
-	term.hidec = 0;
-	/* allocate screen */
-	term.line = calloc(term.row, sizeof(Line));
+	term.line = malloc(term.row * sizeof(Line));
 	for(row = 0 ; row < term.row; row++)
-		term.line[row] = calloc(term.col, sizeof(Glyph));
+		term.line[row] = malloc(term.col * sizeof(Glyph));
+	/* setup screen */
+	treset();
 }
 
 void
@@ -718,7 +710,7 @@ csihandle(void) {
 			case 12: /* att610 -- Stop blinking cursor (IGNORED) */
 				break;
 			case 25:
-				term.hidec = 1;
+				term.c.hide = 1;
 				break;
 			case 1048: /* XXX: no alt. screen to erase/save */
 			case 1049:
@@ -767,7 +759,7 @@ csihandle(void) {
 			case 12: /* att610 -- Start blinking cursor (IGNORED) */
 				break;
 			case 25:
-				term.hidec = 0;
+				term.c.hide = 0;
 				break;
 			case 1048: 
 			case 1049: /* XXX: no alt. screen to erase/save */
@@ -1173,7 +1165,7 @@ draw(int dummy) {
 			if(term.line[y][x].state & GLYPH_SET)
 				xdrawc(x, y, term.line[y][x]);
 
-	if(!term.hidec)
+	if(!term.c.hide)
 		xcursor(CURSOR_DRAW);
 	XCopyArea(xw.dis, xw.buf, xw.win, dc.gc, 0, 0, xw.bufw, xw.bufh, BORDER, BORDER);
 	XFlush(xw.dis);
@@ -1206,7 +1198,7 @@ draw(int redraw_all) {
 		}
 		xdraws(buf, base, ox, y, i);
 	}
-	xcursor(term.hidec ? CURSOR_HIDE : CURSOR_DRAW);
+	xcursor(term.c.hide ? CURSOR_HIDE : CURSOR_DRAW);
 	XCopyArea(xw.dis, xw.buf, xw.win, dc.gc, 0, 0, xw.bufw, xw.bufh, BORDER, BORDER);
 	XFlush(xw.dis);
 }