~petersanchez/st

2181040594ae63f2821899caba0bef34257a6c2b — Aurélien Aptel 13 years ago c186c8e
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.
2 files changed, 21 insertions(+), 28 deletions(-)

M config.h
M st.c
M config.h => config.h +1 -0
@@ 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[] = {

M st.c => st.c +20 -28
@@ 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);
}