tForce redisplay of all lines in DECSCNM - st - [fork] customized build of st, … | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 930b2c4a7f222e15e6493d5bbb8fd90e681d2626 | |
parent a984ffc4cb755c6dcdbc153b2591dca0ae6a8ead | |
Author: Roberto E. Vargas Caballero <[email protected]> | |
Date: Mon, 3 Sep 2012 21:52:34 +0200 | |
Force redisplay of all lines in DECSCNM | |
When it is called DECSCNM all lines become dirty, because it is necessary | |
redraw all lines for getting the new colors. It is easy see the problem | |
running 'echo ^[[?5h'. | |
In order to get a correct flash when running tput flash is necessary wait | |
after DECSCNM, until the changes are displayed, because in other case the | |
switch between reverse on/reverse off will be too much fast and nothing will | |
happen. | |
--- | |
st.c | 12 +++++++++++- | |
1 file changed, 11 insertions(+), 1 deletion(-) | |
Diffstat: | |
M st.c | 12 +++++++++++- | |
1 file changed, 11 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -54,6 +54,7 @@ | |
#define SELECT_TIMEOUT (20*1000) /* 20 ms */ | |
#define DRAW_TIMEOUT (20*1000) /* 20 ms */ | |
+#define REDRAW_TIMEOUT (80*1000) /* 80 ms */ | |
#define SERRNO strerror(errno) | |
#define MIN(a, b) ((a) < (b) ? (a) : (b)) | |
t@@ -238,6 +239,7 @@ typedef struct { | |
static void die(const char*, ...); | |
static void draw(void); | |
+static void redraw(void); | |
static void drawregion(int, int, int, int); | |
static void execsh(void); | |
static void sigchld(int); | |
t@@ -1206,7 +1208,7 @@ tsetmode(bool priv, bool set, int *args, int narg) { | |
mode = term.mode; | |
MODBIT(term.mode,set, MODE_REVERSE); | |
if (mode != term.mode) | |
- draw(); | |
+ redraw(); | |
break; | |
case 7: | |
MODBIT(term.mode, set, MODE_WRAP); | |
t@@ -2030,6 +2032,14 @@ xdrawcursor(void) { | |
} | |
void | |
+redraw(void) { | |
+ struct timespec tv = {0, REDRAW_TIMEOUT * 1000}; | |
+ tfulldirt(); | |
+ draw(); | |
+ nanosleep(&tv, NULL); | |
+} | |
+ | |
+void | |
draw() { | |
drawregion(0, 0, term.col, term.row); | |
xcopy(); |