summaryrefslogtreecommitdiff
path: root/libcons/file-changed.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <marcus@gnu.org>2002-09-13 23:40:10 +0000
committerMarcus Brinkmann <marcus@gnu.org>2002-09-13 23:40:10 +0000
commitcc60ad8bb9596cafe94f48de9ea030ce01e22404 (patch)
treeba7b74a5ab8d70d7505c514c6d63929a9bcaded3 /libcons/file-changed.c
parentfad9d77677aca4ce2fd11705f87adca9b0524ecf (diff)
2002-09-14 Marcus Brinkmann <marcus@gnu.org>
* Makefile (SRCS): Add vcons-input.c. * vcons-input.c: New file. * vcons-scrollback.c (_cons_vcons_scrollback): New function. (cons_vcons_scrollback): Reimplement in terms of _cons_vcons_scrollback. * cons.h (cons_scroll_t): New type. (cons_vcons_scrollback): Update prototype. * priv.h (_cons_jump_down_at_input): New extern. (_cons_jump_down_at_output): Likewise. (_cons_vcons_scrollback): New prototype. * opts-std-startup.c (OPT_JUMP_DOWN_AT_INPUT): New macro. (OPT_JUMP_DOWN_AT_OUTPUT): Likewise. (_cons_jump_down_at_input): New variable. (_cons_jump_down_at_output): Likewise. (startup_options): Add new options --jump-down-at-input and --jump-down-at-output. (parse_startup_opt): Handle these new options. * file-changed.c (cons_S_file_changed): Support the jump down at output option.
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