about summary refs log tree commit diff stats
path: root/termbox
diff options
context:
space:
mode:
Diffstat (limited to 'termbox')
-rw-r--r--termbox/termbox.c9
-rw-r--r--termbox/termbox.h3
2 files changed, 12 insertions, 0 deletions
diff --git a/termbox/termbox.c b/termbox/termbox.c
index c9ea6012..76d43753 100644
--- a/termbox/termbox.c
+++ b/termbox/termbox.c
@@ -181,6 +181,10 @@ void tb_present(void)
       front = &CELL(&front_buffer, x, y);
       w = wcwidth(back->ch);
       if (w < 1) w = 1;
+      if (memcmp(back, front, sizeof(struct tb_cell)) == 0) {
+        x += w;
+        continue;
+      }
       memcpy(front, back, sizeof(struct tb_cell));
       send_attr(back->fg, back->bg);
       if (w > 1 && x >= front_buffer.width - (w - 1)) {
@@ -205,6 +209,11 @@ void tb_present(void)
   bytebuffer_flush(&output_buffer, inout);
 }
 
+void tb_sync(void) {
+  cellbuf_clear(&front_buffer);
+  tb_present();
+}
+
 void tb_set_cursor(int cx, int cy)
 {
   assert(termw != -1);
diff --git a/termbox/termbox.h b/termbox/termbox.h
index c629b01c..a94d2b85 100644
--- a/termbox/termbox.h
+++ b/termbox/termbox.h
@@ -49,6 +49,9 @@ int tb_height(void);
  * tb_present(). */
 void tb_present(void);
 
+/* Variant of tb_present() that always refreshes the entire screen. */
+void tb_sync(void);
+
 /* Returns a pointer to the internal screen state: a 1D array of cells in
  * raster order. You'll need to call tb_width() and tb_height() for the
  * array's dimensions. The array stays valid until tb_clear() or tb_present()