summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Delalande2015-02-15 00:34:03 +0100
committerRoberto E. Vargas Caballero2015-02-22 11:53:34 +0000
commit1b514048b254827f1a83c05e1b2a2428bf31924e (patch)
tree1932d55979fa417d675a8d3e39c990ede67fbf11
parent3604445ffc6ff1bfdfc7614771ca659e423b404b (diff)
downloadst-1b514048b254827f1a83c05e1b2a2428bf31924e.tar.gz
st-1b514048b254827f1a83c05e1b2a2428bf31924e.tar.xz
st-1b514048b254827f1a83c05e1b2a2428bf31924e.zip
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.c21
-rw-r--r--st.info3
2 files changed, 8 insertions, 16 deletions
diff --git a/st.c b/st.c
index b9d30a7..e1139ec 100644
--- 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
index 3b754db..99c066d 100644
--- 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,