summaryrefslogtreecommitdiff
path: root/terminal.c
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2008-12-08 00:16:39 -0500
committerKristian Høgsberg <krh@redhat.com>2008-12-08 00:16:39 -0500
commitb29415ee6d23c83f35b3a0557032996382a8016c (patch)
tree572b4fb791c65d6e41407f96ac16d8cd4b2141ab /terminal.c
parentf04e838d4afd1edde10552e4ade91780b0d52123 (diff)
Update tail pointer correctly so scrolling works.
Diffstat (limited to 'terminal.c')
-rw-r--r--terminal.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/terminal.c b/terminal.c
index dc43d6a..6bc6a51 100644
--- a/terminal.c
+++ b/terminal.c
@@ -55,7 +55,7 @@ struct terminal {
struct wl_display *display;
int resize_scheduled;
char *data;
- int width, height, tail, row, column;
+ int width, height, tail, row, column, total_rows;
int fd, master;
struct buffer *buffer;
GIOChannel *channel;
@@ -149,9 +149,17 @@ terminal_data(struct terminal *terminal, const char *data, size_t length)
break;
case '\n':
terminal->row++;
+ terminal->total_rows++;
terminal->column = 0;
if (terminal->row == terminal->height)
terminal->row = 0;
+ if (terminal->row == terminal->tail && terminal->total_rows > 0) {
+ memset(&terminal->data[terminal->row * (terminal->width + 1)],
+ 0, terminal->width);
+ terminal->tail++;
+ }
+ if (terminal->tail == terminal->height)
+ terminal->tail = 0;
break;
case '\t':
memset(&row[terminal->column], ' ', -terminal->column & 7);