summaryrefslogtreecommitdiff
path: root/libcons/file-changed.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcons/file-changed.c')
-rw-r--r--libcons/file-changed.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/libcons/file-changed.c b/libcons/file-changed.c
index 2c91fe51..21449271 100644
--- a/libcons/file-changed.c
+++ b/libcons/file-changed.c
@@ -124,19 +124,28 @@ cons_S_file_changed (cons_notify_t notify, natural_t tickno,
scrolling = UINT32_MAX - vcons->state.screen.cur_line
+ 1 + new_cur_line;
- /* If we are scrollbacking, defer scrolling
+ /* If we are scrolling back, defer scrolling
until absolutely necessary. */
if (vcons->scrolling)
{
- if (vcons->scrolling + scrolling <= vcons->state.screen.scr_lines)
- {
- vcons->scrolling += scrolling;
- scrolling = 0;
- }
+ if (_cons_jump_down_at_output)
+ _cons_vcons_scrollback
+ (vcons, CONS_SCROLL_ABSOLUTE_LINE, 0);
else
{
- scrolling -= vcons->state.screen.scr_lines - vcons->scrolling;
- vcons->scrolling = vcons->state.screen.scr_lines;
+ if (vcons->scrolling + scrolling
+ <= vcons->state.screen.scr_lines)
+ {
+ vcons->scrolling += scrolling;
+ scrolling = 0;
+ }
+ else
+ {
+ scrolling -= vcons->state.screen.scr_lines
+ - vcons->scrolling;
+ vcons->scrolling
+ = vcons->state.screen.scr_lines;
+ }
}
}
@@ -225,6 +234,9 @@ cons_S_file_changed (cons_notify_t notify, natural_t tickno,
off_t start = change.matrix.start;
off_t end = change.matrix.end;
+ if (vcons->scrolling && _cons_jump_down_at_output)
+ _cons_vcons_scrollback (vcons, CONS_SCROLL_ABSOLUTE_LINE, 0);
+
if (vcons->state.screen.cur_line >= vcons->scrolling)
rotate = vcons->state.screen.cur_line - vcons->scrolling;
else