st

fork of suckless's simple terminal
Index Commits Files Refs README LICENSE
commit 2181040594ae63f2821899caba0bef34257a6c2b
parent c186c8ef9a995616384c425c5568b6913676b252
Author: Aurélien Aptel <aurelien.aptel@gmail.com>
Date:   Sun, 29 Aug 2010 18:55:15 +0200

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.
Diffstat:
Mconfig.h | 1+
Mst.c | 48++++++++++++++++++++----------------------------
2 files changed, 21 insertions(+), 28 deletions(-)
diff --git a/config.h b/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[] = {
diff --git a/st.c b/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);
 }