aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoberto E. Vargas Caballero2012-09-03 21:52:34 +0200
committerRoberto E. Vargas Caballero2012-09-03 21:52:34 +0200
commit889e57e9955fa423d1e0555f2931cf8a97f6d6b5 (patch)
tree51d3b1f5b05893adaba08da130de8a453d64a553
parent518497251fd3aad1267b7b458eba8f4baf2bdcf5 (diff)
downloadaur-889e57e9955fa423d1e0555f2931cf8a97f6d6b5.tar.gz
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(-)
-rw-r--r--st.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/st.c b/st.c
index fde0493f6e39..193db5eaf8bb 100644
--- a/st.c
+++ b/st.c
@@ -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))
@@ -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);
@@ -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);
@@ -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();