[dev] [st] [PATCH] Let curses do the dirty work for flash

From: Ivan Delalande <colona_AT_ycc.fr>
Date: Sun, 15 Feb 2015 00:34:03 +0100

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.
---
 st.c    | 21 ++++++---------------
 st.info |  3 ++-
 2 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/st.c b/st.c
index 1deb7bc..6bddbaf 100644
--- a/st.c
+++ b/st.c
_AT_@ -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))
_AT_@ -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);
_AT_@ -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);
_AT_@ -2200,7 +2198,7 @@ strhandle(void) {
 				 * TODO if defaultbg color is changed, borders
 				 * are dirty
 				 */
-				redraw(0);
+				redraw();
 			}
 			return;
 		}
_AT_@ -3093,7 +3091,7 @@ xzoomabs(const Arg *arg) {
 	xunloadfonts();
 	xloadfonts(usedfont, arg->i);
 	cresize(0, 0);
-	redraw(0);
+	redraw();
 	xhints();
 }
 
_AT_@ -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
_AT_@ -3634,7 +3625,7 @@ expose(XEvent *ev) {
 		if(!e->count)
 			xw.state &= ~WIN_REDRAW;
 	}
-	redraw(0);
+	redraw();
 }
 
 void
diff --git a/st.info b/st.info
index 3b754db..99c066d 100644
--- a/st.info
+++ b/st.info
_AT_@ -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,
_AT_@ -150,6 +150,7 @@ st| simpleterm,
 	mir,
 	msgr,
 	ncv#3,
+	npc,
 	op=\E[39;49m,
 	pairs#64,
 	mc0=\E[i,
-- 
2.3.0
-- 
Ivan "Colona" Delalande
Received on Sun Feb 15 2015 - 00:34:03 CET

This archive was generated by hypermail 2.3.0 : Sun Feb 15 2015 - 00:36:07 CET