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.
This commit is contained in:
		
							parent
							
								
									3604445ffc
								
							
						
					
					
						commit
						1b514048b2
					
				
							
								
								
									
										21
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								st.c
									
									
									
									
									
								
							| @ -63,8 +63,6 @@ char *argv0; | |||||||
| #define XK_NO_MOD     0 | #define XK_NO_MOD     0 | ||||||
| #define XK_SWITCH_MOD (1<<13) | #define XK_SWITCH_MOD (1<<13) | ||||||
| 
 | 
 | ||||||
| #define REDRAW_TIMEOUT (80*1000) /* 80 ms */ |  | ||||||
| 
 |  | ||||||
| /* macros */ | /* macros */ | ||||||
| #define MIN(a, b)  ((a) < (b) ? (a) : (b)) | #define MIN(a, b)  ((a) < (b) ? (a) : (b)) | ||||||
| #define MAX(a, b)  ((a) < (b) ? (b) : (a)) | #define MAX(a, b)  ((a) < (b) ? (b) : (a)) | ||||||
| @ -349,7 +347,7 @@ typedef struct { | |||||||
| 
 | 
 | ||||||
| static void die(const char *, ...); | static void die(const char *, ...); | ||||||
| static void draw(void); | static void draw(void); | ||||||
| static void redraw(int); | static void redraw(void); | ||||||
| static void drawregion(int, int, int, int); | static void drawregion(int, int, int, int); | ||||||
| static void execsh(void); | static void execsh(void); | ||||||
| static void sigchld(int); | static void sigchld(int); | ||||||
| @ -1826,7 +1824,7 @@ tsetmode(bool priv, bool set, int *args, int narg) { | |||||||
| 				mode = term.mode; | 				mode = term.mode; | ||||||
| 				MODBIT(term.mode, set, MODE_REVERSE); | 				MODBIT(term.mode, set, MODE_REVERSE); | ||||||
| 				if(mode != term.mode) | 				if(mode != term.mode) | ||||||
| 					redraw(REDRAW_TIMEOUT); | 					redraw(); | ||||||
| 				break; | 				break; | ||||||
| 			case 6: /* DECOM -- Origin */ | 			case 6: /* DECOM -- Origin */ | ||||||
| 				MODBIT(term.c.state, set, CURSOR_ORIGIN); | 				MODBIT(term.c.state, set, CURSOR_ORIGIN); | ||||||
| @ -2200,7 +2198,7 @@ strhandle(void) { | |||||||
| 				 * TODO if defaultbg color is changed, borders | 				 * TODO if defaultbg color is changed, borders | ||||||
| 				 * are dirty | 				 * are dirty | ||||||
| 				 */ | 				 */ | ||||||
| 				redraw(0); | 				redraw(); | ||||||
| 			} | 			} | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| @ -3093,7 +3091,7 @@ xzoomabs(const Arg *arg) { | |||||||
| 	xunloadfonts(); | 	xunloadfonts(); | ||||||
| 	xloadfonts(usedfont, arg->i); | 	xloadfonts(usedfont, arg->i); | ||||||
| 	cresize(0, 0); | 	cresize(0, 0); | ||||||
| 	redraw(0); | 	redraw(); | ||||||
| 	xhints(); | 	xhints(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -3558,16 +3556,9 @@ xresettitle(void) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| redraw(int timeout) { | redraw(void) { | ||||||
| 	struct timespec tv = {0, timeout * 1000}; |  | ||||||
| 
 |  | ||||||
| 	tfulldirt(); | 	tfulldirt(); | ||||||
| 	draw(); | 	draw(); | ||||||
| 
 |  | ||||||
| 	if(timeout > 0) { |  | ||||||
| 		nanosleep(&tv, NULL); |  | ||||||
| 		XSync(xw.dpy, False); /* necessary for a good tput flash */ |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| @ -3634,7 +3625,7 @@ expose(XEvent *ev) { | |||||||
| 		if(!e->count) | 		if(!e->count) | ||||||
| 			xw.state &= ~WIN_REDRAW; | 			xw.state &= ~WIN_REDRAW; | ||||||
| 	} | 	} | ||||||
| 	redraw(0); | 	redraw(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								st.info
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								st.info
									
									
									
									
									
								
							| @ -32,7 +32,7 @@ st| simpleterm, | |||||||
| 	el=\E[K, | 	el=\E[K, | ||||||
| 	el1=\E[1K, | 	el1=\E[1K, | ||||||
| 	enacs=\E)0, | 	enacs=\E)0, | ||||||
| 	flash=\E[?5h\E[?5l, | 	flash=\E[?5h$<80/>\E[?5l, | ||||||
| 	fsl=^G, | 	fsl=^G, | ||||||
| 	home=\E[H, | 	home=\E[H, | ||||||
| 	hpa=\E[%i%p1%dG, | 	hpa=\E[%i%p1%dG, | ||||||
| @ -150,6 +150,7 @@ st| simpleterm, | |||||||
| 	mir, | 	mir, | ||||||
| 	msgr, | 	msgr, | ||||||
| 	ncv#3, | 	ncv#3, | ||||||
|  | 	npc, | ||||||
| 	op=\E[39;49m, | 	op=\E[39;49m, | ||||||
| 	pairs#64, | 	pairs#64, | ||||||
| 	mc0=\E[i, | 	mc0=\E[i, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user