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
2 changed files with 8 additions and 16 deletions
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 a new issue