diff options
| author | Ivan Delalande <colona@ycc.fr> | 2015-02-15 00:34:03 +0100 |
|---|---|---|
| committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2015-02-22 11:53:34 +0000 |
| commit | 1b514048b254827f1a83c05e1b2a2428bf31924e (patch) | |
| tree | 1932d55979fa417d675a8d3e39c990ede67fbf11 | |
| parent | 3604445ffc6ff1bfdfc7614771ca659e423b404b (diff) | |
| download | st-1b514048b254827f1a83c05e1b2a2428bf31924e.tar.gz 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.c | 21 | ||||
| -rw-r--r-- | st.info | 3 |
2 files changed, 8 insertions, 16 deletions
| @@ -63,8 +63,6 @@ char *argv0; | |||
| 63 | #define XK_NO_MOD 0 | 63 | #define XK_NO_MOD 0 |
| 64 | #define XK_SWITCH_MOD (1<<13) | 64 | #define XK_SWITCH_MOD (1<<13) |
| 65 | 65 | ||
| 66 | #define REDRAW_TIMEOUT (80*1000) /* 80 ms */ | ||
| 67 | |||
| 68 | /* macros */ | 66 | /* macros */ |
| 69 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) | 67 | #define MIN(a, b) ((a) < (b) ? (a) : (b)) |
| 70 | #define MAX(a, b) ((a) < (b) ? (b) : (a)) | 68 | #define MAX(a, b) ((a) < (b) ? (b) : (a)) |
| @@ -349,7 +347,7 @@ typedef struct { | |||
| 349 | 347 | ||
| 350 | static void die(const char *, ...); | 348 | static void die(const char *, ...); |
| 351 | static void draw(void); | 349 | static void draw(void); |
| 352 | static void redraw(int); | 350 | static void redraw(void); |
| 353 | static void drawregion(int, int, int, int); | 351 | static void drawregion(int, int, int, int); |
| 354 | static void execsh(void); | 352 | static void execsh(void); |
| 355 | static void sigchld(int); | 353 | static void sigchld(int); |
| @@ -1826,7 +1824,7 @@ tsetmode(bool priv, bool set, int *args, int narg) { | |||
| 1826 | mode = term.mode; | 1824 | mode = term.mode; |
| 1827 | MODBIT(term.mode, set, MODE_REVERSE); | 1825 | MODBIT(term.mode, set, MODE_REVERSE); |
| 1828 | if(mode != term.mode) | 1826 | if(mode != term.mode) |
| 1829 | redraw(REDRAW_TIMEOUT); | 1827 | redraw(); |
| 1830 | break; | 1828 | break; |
| 1831 | case 6: /* DECOM -- Origin */ | 1829 | case 6: /* DECOM -- Origin */ |
| 1832 | MODBIT(term.c.state, set, CURSOR_ORIGIN); | 1830 | MODBIT(term.c.state, set, CURSOR_ORIGIN); |
| @@ -2200,7 +2198,7 @@ strhandle(void) { | |||
| 2200 | * TODO if defaultbg color is changed, borders | 2198 | * TODO if defaultbg color is changed, borders |
| 2201 | * are dirty | 2199 | * are dirty |
| 2202 | */ | 2200 | */ |
| 2203 | redraw(0); | 2201 | redraw(); |
| 2204 | } | 2202 | } |
| 2205 | return; | 2203 | return; |
| 2206 | } | 2204 | } |
| @@ -3093,7 +3091,7 @@ xzoomabs(const Arg *arg) { | |||
| 3093 | xunloadfonts(); | 3091 | xunloadfonts(); |
| 3094 | xloadfonts(usedfont, arg->i); | 3092 | xloadfonts(usedfont, arg->i); |
| 3095 | cresize(0, 0); | 3093 | cresize(0, 0); |
| 3096 | redraw(0); | 3094 | redraw(); |
| 3097 | xhints(); | 3095 | xhints(); |
| 3098 | } | 3096 | } |
| 3099 | 3097 | ||
| @@ -3558,16 +3556,9 @@ xresettitle(void) { | |||
| 3558 | } | 3556 | } |
| 3559 | 3557 | ||
| 3560 | void | 3558 | void |
| 3561 | redraw(int timeout) { | 3559 | redraw(void) { |
| 3562 | struct timespec tv = {0, timeout * 1000}; | ||
| 3563 | |||
| 3564 | tfulldirt(); | 3560 | tfulldirt(); |
| 3565 | draw(); | 3561 | draw(); |
| 3566 | |||
| 3567 | if(timeout > 0) { | ||
| 3568 | nanosleep(&tv, NULL); | ||
| 3569 | XSync(xw.dpy, False); /* necessary for a good tput flash */ | ||
| 3570 | } | ||
| 3571 | } | 3562 | } |
| 3572 | 3563 | ||
| 3573 | void | 3564 | void |
| @@ -3634,7 +3625,7 @@ expose(XEvent *ev) { | |||
| 3634 | if(!e->count) | 3625 | if(!e->count) |
| 3635 | xw.state &= ~WIN_REDRAW; | 3626 | xw.state &= ~WIN_REDRAW; |
| 3636 | } | 3627 | } |
| 3637 | redraw(0); | 3628 | redraw(); |
| 3638 | } | 3629 | } |
| 3639 | 3630 | ||
| 3640 | void | 3631 | void |
| @@ -32,7 +32,7 @@ st| simpleterm, | |||
| 32 | el=\E[K, | 32 | el=\E[K, |
| 33 | el1=\E[1K, | 33 | el1=\E[1K, |
| 34 | enacs=\E)0, | 34 | enacs=\E)0, |
| 35 | flash=\E[?5h\E[?5l, | 35 | flash=\E[?5h$<80/>\E[?5l, |
| 36 | fsl=^G, | 36 | fsl=^G, |
| 37 | home=\E[H, | 37 | home=\E[H, |
| 38 | hpa=\E[%i%p1%dG, | 38 | hpa=\E[%i%p1%dG, |
| @@ -150,6 +150,7 @@ st| simpleterm, | |||
| 150 | mir, | 150 | mir, |
| 151 | msgr, | 151 | msgr, |
| 152 | ncv#3, | 152 | ncv#3, |
| 153 | npc, | ||
| 153 | op=\E[39;49m, | 154 | op=\E[39;49m, |
| 154 | pairs#64, | 155 | pairs#64, |
| 155 | mc0=\E[i, | 156 | mc0=\E[i, |
