diff options
author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-08-29 18:55:15 +0200 |
---|---|---|
committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-08-29 18:55:15 +0200 |
commit | 2181040594ae63f2821899caba0bef34257a6c2b (patch) | |
tree | 818689249fc00a57efad2e14c8029bf63d740cbd | |
parent | c186c8ef9a995616384c425c5568b6913676b252 (diff) | |
download | st-2181040594ae63f2821899caba0bef34257a6c2b.tar.gz st-2181040594ae63f2821899caba0bef34257a6c2b.tar.bz2 |
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.
-rw-r--r-- | config.h | 1 | ||||
-rw-r--r-- | st.c | 48 |
2 files changed, 21 insertions, 28 deletions
@@ -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[] = { @@ -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); } |