diff --git a/src/filter_sub_source.cc b/src/filter_sub_source.cc index a97cf02e..a3bf6e41 100644 --- a/src/filter_sub_source.cc +++ b/src/filter_sub_source.cc @@ -86,6 +86,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch) auto* tss = top_view->get_sub_source(); tss->toggle_apply_filters(); + top_view->reload_data(); break; } case ' ': { @@ -102,6 +103,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch) fs.set_filter_enabled(tf, !tf->is_enabled()); tss->text_filters_changed(); lv.reload_data(); + top_view->reload_data(); return true; } case 't': { @@ -123,6 +125,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch) tss->text_filters_changed(); lv.reload_data(); + top_view->reload_data(); return true; } case 'D': { @@ -139,6 +142,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch) fs.delete_filter(tf->get_id()); lv.reload_data(); tss->text_filters_changed(); + top_view->reload_data(); return true; } case 'i': { @@ -576,6 +580,7 @@ filter_sub_source::rl_perform(readline_curses* rc) lnav_data.ld_filter_help_status_source.fss_prompt.clear(); this->fss_editing = false; this->fss_editor->set_visible(false); + top_view->reload_data(); this->tss_view->reload_data(); } diff --git a/src/textfile_sub_source.cc b/src/textfile_sub_source.cc index c871e232..d56dab96 100644 --- a/src/textfile_sub_source.cc +++ b/src/textfile_sub_source.cc @@ -72,10 +72,14 @@ textfile_sub_source::text_value_for_line(textview_curses& tc, if (rend_iter == this->tss_rendered_files.end()) { auto* lfo = dynamic_cast( lf->get_logline_observer()); - auto read_result = lf->read_line( - lf->begin() + lfo->lfo_filter_state.tfs_index[line]); - if (read_result.isOk()) { - value_out = to_string(read_result.unwrap()); + if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) { + value_out.clear(); + } else { + auto read_result = lf->read_line( + lf->begin() + lfo->lfo_filter_state.tfs_index[line]); + if (read_result.isOk()) { + value_out = to_string(read_result.unwrap()); + } } } else { rend_iter->second.rf_text_source->text_value_for_line( @@ -122,8 +126,11 @@ textfile_sub_source::text_size_for_line(textview_curses& tc, if (rend_iter == this->tss_rendered_files.end()) { auto* lfo = dynamic_cast( lf->get_logline_observer()); - retval = lf->line_length(lf->begin() - + lfo->lfo_filter_state.tfs_index[line]); + if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) { + } else { + retval = lf->line_length( + lf->begin() + lfo->lfo_filter_state.tfs_index[line]); + } } else { retval = rend_iter->second.rf_text_source->text_size_for_line( tc, line, flags); @@ -325,6 +332,9 @@ textfile_sub_source::text_crumbs_for_line( if (meta_iter != this->tss_doc_metadata.end()) { auto* lfo = dynamic_cast(lf->get_logline_observer()); + if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) { + return; + } auto ll_iter = lf->begin() + lfo->lfo_filter_state.tfs_index[line]; auto ll_next_iter = ll_iter + 1; auto end_offset = (ll_next_iter == lf->end()) @@ -766,6 +776,9 @@ textfile_sub_source::anchor_for_row(vis_line_t vl) } auto* lfo = dynamic_cast(lf->get_logline_observer()); + if (vl >= lfo->lfo_filter_state.tfs_index.size()) { + return retval; + } auto ll_iter = lf->begin() + lfo->lfo_filter_state.tfs_index[vl]; auto ll_next_iter = ll_iter + 1; auto end_offset = (ll_next_iter == lf->end())