# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | 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);
     }