summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-09-14 21:55:12 -0400
committerJesse Luehrs <doy@tozt.net>2014-09-14 21:55:12 -0400
commitbe88a8a25b02b8a4c267faa5523189406aecaf78 (patch)
tree12b5fce2b33fd1fbc447b54442d52000e30b66f0 /src
parent10f748a2dfa64e1fe099f86277823ee54597459e (diff)
downloadlibvt100-be88a8a25b02b8a4c267faa5523189406aecaf78.tar.gz
libvt100-be88a8a25b02b8a4c267faa5523189406aecaf78.zip
stop hardcoding the default scrollback length
Diffstat (limited to 'src')
-rw-r--r--src/screen.c11
-rw-r--r--src/screen.h4
2 files changed, 13 insertions, 2 deletions
diff --git a/src/screen.c b/src/screen.c
index 15ca051..d543b13 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -43,6 +43,8 @@ void vt100_screen_set_window_size(VT100Screen *vt, int rows, int cols)
vt->grid->max.row = rows;
vt->grid->max.col = cols;
+ if (!vt->custom_scrollback_length)
+ vt->scrollback_length = rows;
if (vt->grid->max.row == 0) {
vt->grid->max.row = 1;
@@ -92,6 +94,12 @@ void vt100_screen_set_window_size(VT100Screen *vt, int rows, int cols)
vt->grid->scroll_bottom = vt->grid->max.row - 1;
}
+void vt100_screen_set_scrollback_length(VT100Screen *vt, int rows)
+{
+ vt->scrollback_length = rows;
+ vt->custom_scrollback_length = 1;
+}
+
int vt100_screen_process_string(VT100Screen *vt, char *buf, size_t len)
{
int remaining;
@@ -856,8 +864,7 @@ static void vt100_screen_scroll_down(VT100Screen *vt, int count)
}
}
else {
- /* int scrollback = vt->config.scrollback_length; */
- int scrollback = 4096; // XXX vt100
+ int scrollback = vt->scrollback_length;
if (vt->grid->row_count + count > scrollback) {
int overflow = vt->grid->row_count + count - scrollback;
diff --git a/src/screen.h b/src/screen.h
index 37a9ab7..b6d1ab5 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -92,6 +92,8 @@ struct vt100_screen {
struct vt100_cell_attrs attrs;
+ int scrollback_length;
+
yyscan_t scanner;
YY_BUFFER_STATE state;
@@ -109,11 +111,13 @@ struct vt100_screen {
unsigned char has_selection: 1;
unsigned char dirty: 1;
+ unsigned char custom_scrollback_length: 1;
};
VT100Screen *vt100_screen_new(int rows, int cols);
void vt100_screen_init(VT100Screen *vt);
void vt100_screen_set_window_size(VT100Screen *vt, int rows, int cols);
+void vt100_screen_set_scrollback_length(VT100Screen *vt, int rows);
int vt100_screen_process_string(VT100Screen *vt, char *buf, size_t len);
int vt100_screen_loc_is_selected(VT100Screen *vt, struct vt100_loc loc);
void vt100_screen_get_string(