Let curses do the dirty work for flash - st - Simple Terminal
Log
Files
Refs
README
LICENSE
---
commit 1b514048b254827f1a83c05e1b2a2428bf31924e
parent 3604445ffc6ff1bfdfc7614771ca659e423b404b
Author: Ivan Delalande 
Date:   Sun, 15 Feb 2015 00:34:03 +0100

Let curses do the dirty work for flash

Use the terminfo delay syntax ($) 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.

Diffstat:
  st.c                                |      21 ++++++---------------
  st.info                             |       3 ++-

2 files changed, 8 insertions(+), 16 deletions(-)
---
diff --git a/st.c b/st.c
@@ -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
diff --git a/st.info b/st.info
@@ -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,