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…
	
		Reference in New Issue