[views] do auto-scroll-down for all views

This commit is contained in:
Timothy Stack 2016-03-28 06:13:40 -07:00
parent a384e240f9
commit cad311f557
2 changed files with 26 additions and 24 deletions

View File

@ -107,7 +107,8 @@ while True:
"[%s] POST /update_metrics => generated 47 bytes " "[%s] POST /update_metrics => generated 47 bytes "
"in %s msecs (HTTP/1.1 200) 9 headers in 378 bytes (1 switches on core 60)" % "in %s msecs (HTTP/1.1 200) 9 headers in 378 bytes (1 switches on core 60)" %
(datetime.datetime.utcnow().strftime(DATE_FMT), (datetime.datetime.utcnow().strftime(DATE_FMT),
diter.next())) random.choice(DURATIONS) + random.choice(DURATION_FUZZ)))
# diter.next()))
sys.stdout.flush() sys.stdout.flush()
time.sleep(0.25) time.sleep(0.01)

View File

@ -495,15 +495,22 @@ void rebuild_indexes(bool force)
logfile_sub_source &lss = lnav_data.ld_log_source; logfile_sub_source &lss = lnav_data.ld_log_source;
textview_curses & log_view = lnav_data.ld_views[LNV_LOG]; textview_curses & log_view = lnav_data.ld_views[LNV_LOG];
textview_curses & text_view = lnav_data.ld_views[LNV_TEXT]; textview_curses & text_view = lnav_data.ld_views[LNV_TEXT];
vis_line_t old_bottom(0); vis_line_t old_bottoms[LNV__MAX];
content_line_t top_content = content_line_t(-1); content_line_t top_content = content_line_t(-1);
bool scroll_down; bool scroll_downs[LNV__MAX];
size_t old_count; size_t old_count;
time_t old_time; time_t old_time;
old_count = lss.text_line_count(); old_count = lss.text_line_count();
for (int lpc = 0; lpc < LNV__MAX; lpc++) {
old_bottoms[lpc] = lnav_data.ld_views[lpc].get_top_for_last_row();
scroll_downs[lpc] =
(lnav_data.ld_views[lpc].get_top() >= old_bottoms[lpc]) &&
!(lnav_data.ld_flags & LNF_HEADLESS);
}
if (old_count) { if (old_count) {
top_content = lss.at(log_view.get_top()); top_content = lss.at(log_view.get_top());
} }
@ -511,13 +518,8 @@ void rebuild_indexes(bool force)
{ {
textfile_sub_source * tss = &lnav_data.ld_text_source; textfile_sub_source * tss = &lnav_data.ld_text_source;
std::list<logfile *>::iterator iter; std::list<logfile *>::iterator iter;
bool new_data;
old_bottom = text_view.get_top_for_last_row();
scroll_down = (text_view.get_top() >= old_bottom &&
!(lnav_data.ld_flags & LNF_HEADLESS));
textfile_callback cb; textfile_callback cb;
bool new_data;
new_data = tss->rescan_files(cb); new_data = tss->rescan_files(cb);
force = force || cb.force; force = force || cb.force;
@ -529,7 +531,7 @@ void rebuild_indexes(bool force)
tss->to_front(cb.front_file); tss->to_front(cb.front_file);
redo_search(LNV_TEXT); redo_search(LNV_TEXT);
text_view.reload_data(); text_view.reload_data();
old_bottom = vis_line_t(-1); old_bottoms[LNV_TEXT] = vis_line_t(-1);
new_data = false; new_data = false;
} }
@ -539,7 +541,7 @@ void rebuild_indexes(bool force)
} }
if (cb.front_top < text_view.get_inner_height()) { if (cb.front_top < text_view.get_inner_height()) {
text_view.set_top(vis_line_t(cb.front_top)); text_view.set_top(vis_line_t(cb.front_top));
scroll_down = false; scroll_downs[LNV_TEXT] = false;
} }
} }
@ -550,16 +552,9 @@ void rebuild_indexes(bool force)
lnav_data.ld_search_child[LNV_TEXT]->get_grep_proc()->start(); lnav_data.ld_search_child[LNV_TEXT]->get_grep_proc()->start();
} }
text_view.reload_data(); text_view.reload_data();
if (scroll_down && text_view.get_top_for_last_row() > text_view.get_top()) {
text_view.set_top(text_view.get_top_for_last_row());
}
} }
old_time = lnav_data.ld_top_time; old_time = lnav_data.ld_top_time;
old_bottom = log_view.get_top_for_last_row();
scroll_down = (log_view.get_top() >= old_bottom &&
!(lnav_data.ld_flags & LNF_HEADLESS));
if (force) { if (force) {
old_count = 0; old_count = 0;
} }
@ -593,10 +588,7 @@ void rebuild_indexes(bool force)
log_view.reload_data(); log_view.reload_data();
if (scroll_down && log_view.get_top_for_last_row() > log_view.get_top()) { if (!scroll_downs[LNV_LOG] && force) {
log_view.set_top(log_view.get_top_for_last_row());
}
else if (!scroll_down && force) {
content_line_t new_top_content = content_line_t(-1); content_line_t new_top_content = content_line_t(-1);
if (new_count) { if (new_count) {
@ -634,6 +626,14 @@ void rebuild_indexes(bool force)
lnav_data.ld_view_stack.top()->reload_data(); lnav_data.ld_view_stack.top()->reload_data();
} }
for (int lpc = 0; lpc < LNV__MAX; lpc++) {
textview_curses &scroll_view = lnav_data.ld_views[lpc];
if (scroll_downs[lpc] && scroll_view.get_top_for_last_row() > scroll_view.get_top()) {
scroll_view.set_top(scroll_view.get_top_for_last_row());
}
}
if (!lnav_data.ld_view_stack.empty()) { if (!lnav_data.ld_view_stack.empty()) {
textview_curses *tc = lnav_data.ld_view_stack.top(); textview_curses *tc = lnav_data.ld_view_stack.top();
lnav_data.ld_bottom_source.update_filtered(tc->get_sub_source()); lnav_data.ld_bottom_source.update_filtered(tc->get_sub_source());
@ -2551,7 +2551,8 @@ int main(int argc, char *argv[])
lnav_data.ld_views[LNV_SPECTRO] lnav_data.ld_views[LNV_SPECTRO]
.set_sub_source(&lnav_data.ld_spectro_source) .set_sub_source(&lnav_data.ld_spectro_source)
.set_overlay_source(&lnav_data.ld_spectro_source) .set_overlay_source(&lnav_data.ld_spectro_source)
.add_input_delegate(lnav_data.ld_spectro_source); .add_input_delegate(lnav_data.ld_spectro_source)
.set_tail_space(vis_line_t(2));
lnav_data.ld_match_view.set_left(0); lnav_data.ld_match_view.set_left(0);