~petersanchez/st

1b514048b254827f1a83c05e1b2a2428bf31924e — Ivan Delalande 9 years ago 3604445
Let curses do the dirty work for flash

Use the terminfo delay syntax ($<x>) in our flash capability to avoid
hardcoding a fixed delay in redraw() when called from tsetmode() with
DECSCNM.
We need to turn on the npc capability so that delays are made with
xon/xoff instead of padding characters.
2 files changed, 8 insertions(+), 16 deletions(-)

M st.c
M st.info
M st.c => st.c +6 -15
@@ 63,8 63,6 @@ char *argv0;
#define XK_NO_MOD     0
#define XK_SWITCH_MOD (1<<13)

#define REDRAW_TIMEOUT (80*1000) /* 80 ms */

/* macros */
#define MIN(a, b)  ((a) < (b) ? (a) : (b))
#define MAX(a, b)  ((a) < (b) ? (b) : (a))


@@ 349,7 347,7 @@ typedef struct {

static void die(const char *, ...);
static void draw(void);
static void redraw(int);
static void redraw(void);
static void drawregion(int, int, int, int);
static void execsh(void);
static void sigchld(int);


@@ 1826,7 1824,7 @@ tsetmode(bool priv, bool set, int *args, int narg) {
				mode = term.mode;
				MODBIT(term.mode, set, MODE_REVERSE);
				if(mode != term.mode)
					redraw(REDRAW_TIMEOUT);
					redraw();
				break;
			case 6: /* DECOM -- Origin */
				MODBIT(term.c.state, set, CURSOR_ORIGIN);


@@ 2200,7 2198,7 @@ strhandle(void) {
				 * TODO if defaultbg color is changed, borders
				 * are dirty
				 */
				redraw(0);
				redraw();
			}
			return;
		}


@@ 3093,7 3091,7 @@ xzoomabs(const Arg *arg) {
	xunloadfonts();
	xloadfonts(usedfont, arg->i);
	cresize(0, 0);
	redraw(0);
	redraw();
	xhints();
}



@@ 3558,16 3556,9 @@ xresettitle(void) {
}

void
redraw(int timeout) {
	struct timespec tv = {0, timeout * 1000};

redraw(void) {
	tfulldirt();
	draw();

	if(timeout > 0) {
		nanosleep(&tv, NULL);
		XSync(xw.dpy, False); /* necessary for a good tput flash */
	}
}

void


@@ 3634,7 3625,7 @@ expose(XEvent *ev) {
		if(!e->count)
			xw.state &= ~WIN_REDRAW;
	}
	redraw(0);
	redraw();
}

void

M st.info => st.info +2 -1
@@ 32,7 32,7 @@ st| simpleterm,
	el=\E[K,
	el1=\E[1K,
	enacs=\E)0,
	flash=\E[?5h\E[?5l,
	flash=\E[?5h$<80/>\E[?5l,
	fsl=^G,
	home=\E[H,
	hpa=\E[%i%p1%dG,


@@ 150,6 150,7 @@ st| simpleterm,
	mir,
	msgr,
	ncv#3,
	npc,
	op=\E[39;49m,
	pairs#64,
	mc0=\E[i,