moved term.hidec in term.c for consistency, put back delay in xbell() - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2181040594ae63f2821899caba0bef34257a6c2b
 (DIR) parent c186c8ef9a995616384c425c5568b6913676b252
 (HTM) 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:
         M config.h                            |       1 +
         M st.c                                |      48 +++++++++++++------------------
       
       2 files changed, 21 insertions(+), 28 deletions(-)
       ---
 (DIR) 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[] = {
 (DIR) 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);
        }