diff options
| author | Ivan Delalande <colona@ycc.fr> | 2015-02-15 00:34:03 +0100 | 
|---|---|---|
| committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2015-02-22 11:53:34 +0000 | 
| commit | 1b514048b254827f1a83c05e1b2a2428bf31924e (patch) | |
| tree | 1932d55979fa417d675a8d3e39c990ede67fbf11 | |
| parent | 3604445ffc6ff1bfdfc7614771ca659e423b404b (diff) | |
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.
| -rw-r--r-- | st.c | 21 | ||||
| -rw-r--r-- | st.info | 3 | 
2 files changed, 8 insertions, 16 deletions
| @@ -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 @@ -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, | 
