~kris/suckless

st

c07885e9fac0a29f8a610394329052fb026207dc — siduck 4 years ago def6d57 + 44f6012
Merge pull request #33 from DEliasVCruz/blinkcursor

feat: add blinking cursor patch support
2 files changed, 42 insertions(+), 18 deletions(-)

M config.def.h
M x.c
M config.def.h => config.def.h +12 -6
@@ 153,13 153,19 @@ unsigned int defaultcs = 256;
unsigned int defaultrcs = 257;

/*
 * Default shape of cursor
 * 2: Block ("█")
 * 4: Underline ("_")
 * 6: Bar ("|")
 * 7: Snowman ("☃")
 * https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h4-Functions-using-CSI-_-ordered-by-the-final-character-lparen-s-rparen:CSI-Ps-SP-q.1D81
 * Default style of cursor
 * 0: Blinking block
 * 1: Blinking block (default)
 * 2: Steady block ("█")
 * 3: Blinking underline
 * 4: Steady underline ("_")
 * 5: Blinking bar
 * 6: Steady bar ("|")
 * 7: Blinking st cursor
 * 8: Steady st cursor
 */
static unsigned int cursorshape = 2;
static unsigned int cursorshape = 1;

/*
 * Default columns and rows numbers

M x.c => x.c +30 -12
@@ 265,6 265,7 @@ static char *opt_name  = NULL;
static char *opt_title = NULL;

static int oldbutton = 3; /* button event on startup: 3 = release */
static int cursorblinks = 0;

void
clipcopy(const Arg *dummy)


@@ 315,7 316,7 @@ changealpha(const Arg *arg)
        alpha = 0;
    if(alpha > 1)
        alpha = 1;
    

    xloadcols();
    redraw();
}


@@ 1648,15 1649,19 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og, Line line, int le
	/* draw the new one */
	if (IS_SET(MODE_FOCUSED)) {
		switch (win.cursor) {
		case 7: /* st extension: snowman (U+2603) */
			g.u = 0x2603;
		case 0: /* Blinking Block */
		case 1: /* Blinking Block (Default) */
		case 2: /* Steady Block */
		case 0: /* Blinking block */
		case 1: /* Blinking block (default) */
			if (IS_SET(MODE_BLINK))
				break;
			/* FALLTHROUGH */
		case 2: /* Steady block */
			xdrawglyph(g, cx, cy);
			break;
		case 3: /* Blinking Underline */
		case 4: /* Steady Underline */
		case 3: /* Blinking underline */
			if (IS_SET(MODE_BLINK))
				break;
			/* FALLTHROUGH */
		case 4: /* Steady underline */
			XftDrawRect(xw.draw, &drawcol,
					borderpx + cx * win.cw,
					borderpx + (cy + 1) * win.ch - \


@@ 1664,13 1669,19 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og, Line line, int le
					win.cw, cursorthickness);
			break;
		case 5: /* Blinking bar */
			if (IS_SET(MODE_BLINK))
				break;
			/* FALLTHROUGH */
		case 6: /* Steady bar */
			XftDrawRect(xw.draw, &drawcol,
					borderpx + cx * win.cw,
					borderpx + cy * win.ch,
					cursorthickness, win.ch);
			break;
		}
		case 7: /* Blinking st cursor */
			if (IS_SET(MODE_BLINK))
				break;
        }
	} else {
		XftDrawRect(xw.draw, &drawcol,
				borderpx + cx * win.cw,


@@ 1817,9 1828,12 @@ int
xsetcursor(int cursor)
{
	DEFAULT(cursor, 1);
	if (!BETWEEN(cursor, 0, 6))
	if (!BETWEEN(cursor, 0, 8)) /* 7-8: st extensions */
		return 1;
	win.cursor = cursor;
	cursorblinks = win.cursor == 0 || win.cursor == 1 ||
	               win.cursor == 3 || win.cursor == 5 ||
	               win.cursor == 7;
	return 0;
}



@@ 2058,6 2072,10 @@ run(void)
		if (FD_ISSET(ttyfd, &rfd) || xev) {
			if (!drawing) {
				trigger = now;
				if (IS_SET(MODE_BLINK)) {
					win.mode ^= MODE_BLINK;
				}
				lastblink = now;
				drawing = 1;
			}
			timeout = (maxlatency - TIMEDIFF(now, trigger)) \


@@ 2068,7 2086,7 @@ run(void)

		/* idle detected or maxlatency exhausted -> draw */
		timeout = -1;
		if (blinktimeout && tattrset(ATTR_BLINK)) {
		if (blinktimeout && (cursorblinks || tattrset(ATTR_BLINK))) {
			timeout = blinktimeout - TIMEDIFF(now, lastblink);
			if (timeout <= 0) {
				if (-timeout > blinktimeout) /* start visible */


@@ 2281,7 2299,7 @@ main(int argc, char *argv[])
{
	xw.l = xw.t = 0;
	xw.isfixed = False;
	win.cursor = cursorshape;
	xsetcursor(cursorshape);

	ARGBEGIN {
	case 'a':