diff --git a/src/command_executor.cc b/src/command_executor.cc index bcfc636b..f110e7ce 100644 --- a/src/command_executor.cc +++ b/src/command_executor.cc @@ -113,7 +113,7 @@ sql_progress(const struct log_cursor& lc) size_t total = lnav_data.ld_log_source.text_line_count(); off_t off = lc.lc_curr_line; - if (off < 0) { + if (off < 0 || off >= total) { return 0; } diff --git a/src/hotkeys.cc b/src/hotkeys.cc index 7810f5e1..8a99ebfd 100644 --- a/src/hotkeys.cc +++ b/src/hotkeys.cc @@ -231,9 +231,9 @@ handle_paging_key(int ch) case 'a': if (lnav_data.ld_last_view == nullptr) { - alerter::singleton().chime(); + alerter::singleton().chime("no last view available"); } else { - textview_curses* tc = lnav_data.ld_last_view; + auto* tc = lnav_data.ld_last_view; lnav_data.ld_last_view = nullptr; ensure_view(tc); @@ -242,7 +242,7 @@ handle_paging_key(int ch) case 'A': if (lnav_data.ld_last_view == nullptr) { - alerter::singleton().chime(); + alerter::singleton().chime("no last view available"); } else { auto* tc = lnav_data.ld_last_view; auto* top_tc = *lnav_data.ld_view_stack.top(); @@ -305,13 +305,13 @@ handle_paging_key(int ch) lnav_data.ld_rl_view->set_alt_value( HELP_MSG_1(m, "to bookmark a line")); } else { - alerter::singleton().chime(); + alerter::singleton().chime("no more search hits to the right"); } } break; case '<': if (tc->get_left() == 0) { - alerter::singleton().chime(); + alerter::singleton().chime("no more search hits to the left"); } else { std::pair range; @@ -357,7 +357,7 @@ handle_paging_key(int ch) case 'z': if ((lnav_data.ld_zoom_level - 1) < 0) { - alerter::singleton().chime(); + alerter::singleton().chime("maximum zoom-in level reached"); } else { execute_command( ec, @@ -368,7 +368,7 @@ handle_paging_key(int ch) case 'Z': if ((lnav_data.ld_zoom_level + 1) >= ZOOM_COUNT) { - alerter::singleton().chime(); + alerter::singleton().chime("maximum zoom-out level reached"); } else { execute_command( ec, @@ -396,7 +396,8 @@ handle_paging_key(int ch) tc->shift_top(1_vl); } if (lnav_data.ld_last_user_mark[tc] + 1 - >= tc->get_inner_height()) { + >= tc->get_inner_height()) + { break; } lnav_data.ld_last_user_mark[tc] += 1; @@ -431,7 +432,7 @@ handle_paging_key(int ch) lnav_data.ld_last_user_mark[tc] = new_mark - 1; } else { lnav_data.ld_last_user_mark[tc] = new_mark; - alerter::singleton().chime(); + alerter::singleton().chime("no more lines to mark"); } lnav_data.ld_select_start[tc] = tc->get_top(); tc->reload_data(); @@ -442,8 +443,9 @@ handle_paging_key(int ch) case 'M': if (lnav_data.ld_last_user_mark.find(tc) - == lnav_data.ld_last_user_mark.end()) { - alerter::singleton().chime(); + == lnav_data.ld_last_user_mark.end()) + { + alerter::singleton().chime("no lines have been marked"); } else { int start_line = std::min((int) tc->get_top(), lnav_data.ld_last_user_mark[tc] + 1); @@ -486,7 +488,8 @@ handle_paging_key(int ch) while (next_top < tc->get_inner_height()) { if (!lss->find_line(lss->at(next_top))->is_message()) { } else if (lss->get_line_accel_direction(next_top) - == log_accel::A_DECEL) { + == log_accel::A_DECEL) + { --next_top; tc->set_top(next_top); break; @@ -509,7 +512,8 @@ handle_paging_key(int ch) while (0 <= next_top && next_top < tc->get_inner_height()) { if (!lss->find_line(lss->at(next_top))->is_message()) { } else if (lss->get_line_accel_direction(next_top) - == log_accel::A_DECEL) { + == log_accel::A_DECEL) + { --next_top; tc->set_top(next_top); break; @@ -562,7 +566,8 @@ handle_paging_key(int ch) case 'D': if (tc->get_top() == 0) { - alerter::singleton().chime(); + alerter::singleton().chime( + "the top of the log has been reached"); } else if (lss) { lss->time_for_row(tc->get_top()) | [lss, ch, tc](auto first_time) { @@ -605,7 +610,8 @@ handle_paging_key(int ch) struct line_range opid_range = find_string_attr_range( start_helper.lh_string_attrs, &logline::L_OPID); if (!opid_range.is_valid()) { - alerter::singleton().chime(); + alerter::singleton().chime( + "Log message does not contain an opid"); lnav_data.ld_rl_view->set_attr_value( lnav::console::user_message::error( "Log message does not contain an opid") @@ -620,7 +626,8 @@ handle_paging_key(int ch) while (true) { if (ch == 'o') { if (++next_helper.lh_current_line - >= tc->get_inner_height()) { + >= tc->get_inner_height()) + { break; } } else { @@ -668,7 +675,8 @@ handle_paging_key(int ch) "No more messages found with opid: ") .append(lnav::roles::symbol(opid_str))) .to_attr_line()); - alerter::singleton().chime(); + alerter::singleton().chime( + "no more messages found with opid"); } } } @@ -692,7 +700,7 @@ handle_paging_key(int ch) case 't': if (lnav_data.ld_text_source.current_file() == nullptr) { - alerter::singleton().chime(); + alerter::singleton().chime("No text files loaded"); lnav_data.ld_rl_view->set_attr_value( lnav::console::user_message::error("No text files loaded") .to_attr_line()); @@ -775,7 +783,8 @@ handle_paging_key(int ch) for (row = 0; row < dls.dls_rows.size(); row++) { if (strcmp(dls.dls_rows[row][log_line_index.value()], linestr.data()) - == 0) { + == 0) + { vis_line_t db_line(row); db_tc->set_top(db_line); @@ -813,7 +822,8 @@ handle_paging_key(int ch) size_t col_len = strlen(col_value); if (dts.scan(col_value, col_len, nullptr, &tm, tv) - != nullptr) { + != nullptr) + { lnav_data.ld_log_source.find_from_time(tv) | [tc](auto vl) { tc->set_top(vl); @@ -878,7 +888,8 @@ handle_paging_key(int ch) } } } else { - alerter::singleton().chime(); + alerter::singleton().chime( + "no configuration panels in this view"); } break; diff --git a/src/internals/cmd-ref.rst b/src/internals/cmd-ref.rst index 78358e32..0187f66b 100644 --- a/src/internals/cmd-ref.rst +++ b/src/internals/cmd-ref.rst @@ -44,7 +44,7 @@ :alt-msg Press t to switch to the text view **See Also** - :ref:`echo`, :ref:`eval`, :ref:`export_session_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_view_to` + :ref:`echo`, :ref:`eval`, :ref:`export_session_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_view_to` ---- @@ -414,7 +414,7 @@ :echo Hello, World! **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -473,7 +473,7 @@ :eval ;SELECT * FROM ${table} **See Also** - :ref:`alt_msg`, :ref:`echo`, :ref:`export_session_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`echo`, :ref:`export_session_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_view_to` ---- @@ -489,7 +489,7 @@ * **path\*** --- The path to the file to write **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1006,6 +1006,19 @@ ---- +.. _rebuild: + +:rebuild +^^^^^^^^ + + Forcefully rebuild file indexes + + **See Also** + :ref:`alt_msg`, :ref:`echo`, :ref:`eval`, :ref:`export_session_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_view_to` + +---- + + .. _redirect_to: :redirect-to *\[path\]* @@ -1024,7 +1037,7 @@ :redirect-to /tmp/script-output.txt **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1412,7 +1425,7 @@ :write-table-to /tmp/table.txt **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1435,7 +1448,7 @@ :write-csv-to /tmp/table.csv **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1458,7 +1471,7 @@ :write-json-to /tmp/table.json **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1481,7 +1494,7 @@ :write-jsonlines-to /tmp/table.json **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1505,7 +1518,7 @@ :write-raw-to /tmp/table.txt **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1528,7 +1541,7 @@ :write-screen-to /tmp/table.txt **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to`, :ref:`write_view_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1551,7 +1564,7 @@ :write-to /tmp/interesting-lines.txt **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_view_to`, :ref:`write_view_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_view_to`, :ref:`write_view_to` ---- @@ -1574,7 +1587,7 @@ :write-view-to /tmp/table.txt **See Also** - :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to` + :ref:`alt_msg`, :ref:`append_to`, :ref:`create_logline_table`, :ref:`create_search_table`, :ref:`echo`, :ref:`echo`, :ref:`echoln`, :ref:`eval`, :ref:`export_session_to`, :ref:`export_session_to`, :ref:`pipe_line_to`, :ref:`pipe_to`, :ref:`rebuild`, :ref:`redirect_to`, :ref:`redirect_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_csv_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_json_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_jsonlines_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_raw_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_screen_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_table_to`, :ref:`write_to`, :ref:`write_to` ---- diff --git a/src/listview_curses.cc b/src/listview_curses.cc index 665672cc..404dadd6 100644 --- a/src/listview_curses.cc +++ b/src/listview_curses.cc @@ -298,7 +298,8 @@ listview_curses::do_update() this->lv_gutter_source->listview_gutter_value_for_range( *this, range_start, range_end, ch, role, bar_role); if (gutter_y >= (unsigned int) y - && gutter_y <= (unsigned int) lines) { + && gutter_y <= (unsigned int) lines) + { role = bar_role; } attrs = vc.attrs_for_role(role); @@ -365,9 +366,6 @@ listview_curses::shift_selection(int offset) if (new_selection >= 0_vl && new_selection < this->get_inner_height()) { this->set_selection(new_selection); this->scroll_selection_into_view(); - } else if (!alerter::singleton().chime()) { - // XXX Disabling for now... - // this->delegate_scroll_out(); } } @@ -482,7 +480,7 @@ listview_curses::set_top(vis_line_t top, bool suppress_flash) } if (top < 0 || (top > 0 && top >= inner_height)) { if (suppress_flash == false) { - alerter::singleton().chime(); + alerter::singleton().chime("invalid top"); } } else if (this->lv_top != top) { this->lv_top = top; diff --git a/src/listview_curses.hh b/src/listview_curses.hh index b69088ac..9e8f301f 100644 --- a/src/listview_curses.hh +++ b/src/listview_curses.hh @@ -90,13 +90,12 @@ class list_gutter_source { public: virtual ~list_gutter_source() = default; - virtual void listview_gutter_value_for_range( - const listview_curses& lv, - int start, - int end, - chtype& ch_out, - role_t& role_out, - role_t& bar_role_out) + virtual void listview_gutter_value_for_range(const listview_curses& lv, + int start, + int end, + chtype& ch_out, + role_t& role_out, + role_t& bar_role_out) { ch_out = ACS_VLINE; } @@ -340,7 +339,8 @@ public: { if (offset < 0 && this->lv_top == 0) { if (suppress_flash == false) { - alerter::singleton().chime(); + alerter::singleton().chime( + "the top of the view has been reached"); } } else { this->set_top(std::max(0_vl, this->lv_top + offset), @@ -369,7 +369,8 @@ public: this->get_dimensions(height, width); if ((this->get_inner_width() - this->lv_left) <= width) { - alerter::singleton().chime(); + alerter::singleton().chime( + "the maximum width of the view has been reached"); return; } } @@ -391,7 +392,8 @@ public: unsigned int shift_left(int offset) { if (this->lv_word_wrap) { - alerter::singleton().chime(); + alerter::singleton().chime( + "cannot scroll horizontally when word wrap is enabled"); } else if (offset < 0 && this->lv_left < (unsigned int) -offset) { this->set_left(0); } else { diff --git a/src/lnav.cc b/src/lnav.cc index 5d255bf8..e889dbd5 100644 --- a/src/lnav.cc +++ b/src/lnav.cc @@ -1327,7 +1327,7 @@ looper() "command ", encoded_name, keyseq)); - alerter::singleton().chime(); + alerter::singleton().chime("unrecognized key"); }; } diff --git a/src/lnav_commands.cc b/src/lnav_commands.cc index 163ecf5b..20bddd19 100644 --- a/src/lnav_commands.cc +++ b/src/lnav_commands.cc @@ -989,7 +989,7 @@ com_save_to(exec_context& ec, } else if (split_args[0] == "/dev/clipboard") { auto open_res = sysclip::open(sysclip::type_t::GENERAL); if (open_res.isErr()) { - alerter::singleton().chime(); + alerter::singleton().chime("cannot open clipboard"); return ec.make_error("Unable to copy to clipboard: {}", open_res.unwrapErr()); } @@ -1557,7 +1557,7 @@ com_redirect_to(exec_context& ec, } else if (split_args[0] == "/dev/clipboard") { auto out = sysclip::open(sysclip::type_t::GENERAL); if (out.isErr()) { - alerter::singleton().chime(); + alerter::singleton().chime("cannot open clipboard"); return ec.make_error("Unable to copy to clipboard: {}", out.unwrapErr()); } @@ -3653,15 +3653,18 @@ com_export_session_to(exec_context& ec, } else if (fn == "/dev/clipboard") { auto open_res = sysclip::open(sysclip::type_t::GENERAL); if (open_res.isErr()) { - alerter::singleton().chime(); + alerter::singleton().chime("cannot open clipboard"); return ec.make_error("Unable to copy to clipboard: {}", open_res.unwrapErr()); } outfile = open_res.unwrap(); } else if (lnav_data.ld_flags & LNF_SECURE_MODE) { return ec.make_error("{} -- unavailable in secure mode", args[0]); - } else if ((outfile = fopen(fn.c_str(), "w")) == nullptr) { - return ec.make_error("unable to open file -- {}", fn); + } else { + if ((outfile = fopen(fn.c_str(), "we")) == nullptr) { + return ec.make_error("unable to open file -- {}", fn); + } + fchmod(fileno(outfile.in()), S_IRWXU); } auto export_res = lnav::session::export_to(outfile.in()); @@ -3959,6 +3962,7 @@ com_rebuild(exec_context& ec, { if (args.empty()) { } else if (!ec.ec_dry_run) { + rescan_files(true); rebuild_indexes_repeatedly(); } @@ -5466,6 +5470,11 @@ readline_context::command_t STD_COMMANDS[] = { .with_summary("Export the current lnav state to an lnav script file") .with_parameter(help_text("path", "The path to the file to write")) .with_tags({"io", "scripting"})}, + {"rebuild", + com_rebuild, + help_text(":rebuild") + .with_summary("Forcefully rebuild file indexes") + .with_tags({"scripting"})}, {"set-min-log-level", com_set_min_log_level, @@ -5590,11 +5599,10 @@ init_lnav_commands(readline_context::command_map_t& cmd_map) cmd_map["add-test"] = &add_test; } if (getenv("lnav_test") != nullptr) { - static readline_context::command_t rebuild(com_rebuild), + static readline_context::command_t shexec(com_shexec), poll_now(com_poll_now), test_comment(com_test_comment); - cmd_map["rebuild"] = &rebuild; cmd_map["shexec"] = &shexec; cmd_map["poll-now"] = &poll_now; cmd_map["test-comment"] = &test_comment; diff --git a/src/session.export.cc b/src/session.export.cc index bb2b9b2d..3412c3ca 100644 --- a/src/session.export.cc +++ b/src/session.export.cc @@ -131,12 +131,16 @@ SELECT content_id, format, time_offset FROM lnav_file WHERE format IS NOT NULL AND time_offset != 0 )"; - static const char* HEADER = R"( + static constexpr const char HEADER[] = R"(#!lnav -Nf # This file is an export of an lnav session. You can type # '|/path/to/this/file' in lnav to execute this file and # restore the state of the session. -# + +;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || {0} || ' or later') + WHERE lnav_version() < {0} COLLATE naturalcase + # The files loaded into the session were: + )"; static constexpr const char MARK_HEADER[] = R"( @@ -189,11 +193,13 @@ SELECT content_id, format, time_offset FROM lnav_file .with_reason(prep_mark_res.unwrapErr())); } - fmt::print(file, FMT_STRING("{}"), HEADER); + fmt::print(file, FMT_STRING(HEADER), sqlitepp::quote(PACKAGE_VERSION)); for (const auto& lf : lnav_data.ld_active_files.fc_files) { - fmt::print(file, FMT_STRING("# {}"), lf->get_filename()); + fmt::print(file, FMT_STRING(":open {}"), lf->get_filename()); } + fmt::print(file, FMT_STRING("\n:rebuild\n")); + auto mark_count = 0; auto each_mark_res = prep_mark_res.unwrap().for_each_row( diff --git a/src/spectro_source.cc b/src/spectro_source.cc index 03d3c5c9..a495f924 100644 --- a/src/spectro_source.cc +++ b/src/spectro_source.cc @@ -66,7 +66,8 @@ spectrogram_source::list_input_handle_key(listview_curses& lv, int ch) if (sel < 0 || (size_t) sel >= this->text_line_count() || !this->ss_cursor_column || this->ss_value_source == nullptr) { - alerter::singleton().chime(); + alerter::singleton().chime( + "a value must be selected before it can be marked"); return true; } diff --git a/src/view_curses.cc b/src/view_curses.cc index 1bea96ed..ceb2b577 100644 --- a/src/view_curses.cc +++ b/src/view_curses.cc @@ -88,6 +88,22 @@ alerter::singleton() return retval; } +bool +alerter::chime(std::string msg) +{ + if (!this->a_enabled) { + return true; + } + + bool retval = this->a_do_flash; + if (this->a_do_flash) { + log_warning("chime message: %s", msg.c_str()); + ::flash(); + } + this->a_do_flash = false; + return retval; +} + struct utf_to_display_adjustment { int uda_origin; int uda_offset; diff --git a/src/view_curses.hh b/src/view_curses.hh index 6b599e3f..ec4bafe1 100644 --- a/src/view_curses.hh +++ b/src/view_curses.hh @@ -149,19 +149,7 @@ public: void enabled(bool enable) { this->a_enabled = enable; } - bool chime() - { - if (!this->a_enabled) { - return true; - } - - bool retval = this->a_do_flash; - if (this->a_do_flash) { - ::flash(); - } - this->a_do_flash = false; - return retval; - } + bool chime(std::string msg); void new_input(int ch) { @@ -377,25 +365,13 @@ public: void set_default_role(role_t role) { this->vc_default_role = role; } - void set_visible(bool value) - { - this->vc_visible = value; - } + void set_visible(bool value) { this->vc_visible = value; } - bool is_visible() const - { - return this->vc_visible; - } + bool is_visible() const { return this->vc_visible; } - void set_width(long width) - { - this->vc_width = width; - } + void set_width(long width) { this->vc_width = width; } - long get_width() const - { - return this->vc_width; - } + long get_width() const { return this->vc_width; } static void awaiting_user_input(); @@ -469,25 +445,13 @@ public: return std::find(this->begin(), this->end(), view); } - iterator begin() - { - return this->vs_views.begin(); - } + iterator begin() { return this->vs_views.begin(); } - iterator end() - { - return this->vs_views.end(); - } + iterator end() { return this->vs_views.end(); } - size_t size() const - { - return this->vs_views.size(); - } + size_t size() const { return this->vs_views.size(); } - bool empty() const - { - return this->vs_views.empty(); - } + bool empty() const { return this->vs_views.empty(); } std::function vs_change_handler; diff --git a/src/view_helpers.cc b/src/view_helpers.cc index b81df7db..cbafa7c2 100644 --- a/src/view_helpers.cc +++ b/src/view_helpers.cc @@ -857,7 +857,12 @@ toggle_view(textview_curses* toggle_tc) lnav_data.ld_last_view = tc; lnav_data.ld_view_stack.pop_back(); } else { - if (toggle_tc == &lnav_data.ld_views[LNV_SCHEMA]) { + if (toggle_tc == &lnav_data.ld_views[LNV_LOG] + || toggle_tc == &lnav_data.ld_views[LNV_TEXT]) + { + rescan_files(true); + rebuild_indexes_repeatedly(); + } else if (toggle_tc == &lnav_data.ld_views[LNV_SCHEMA]) { open_schema_view(); } else if (toggle_tc == &lnav_data.ld_views[LNV_PRETTY]) { open_pretty_view(); @@ -982,7 +987,7 @@ moveto_cluster(nonstd::optional (bookmark_vector::*f)( return true; } - alerter::singleton().chime(); + alerter::singleton().chime("unable to find next bookmark"); return false; } @@ -1020,7 +1025,7 @@ previous_cluster(const bookmark_type_t* bt, textview_curses* tc) tc->set_top(new_top.value()); } } else { - alerter::singleton().chime(); + alerter::singleton().chime("no previous bookmark"); } } diff --git a/src/vt52_curses.cc b/src/vt52_curses.cc index a258d6e8..60b00c7a 100644 --- a/src/vt52_curses.cc +++ b/src/vt52_curses.cc @@ -212,7 +212,8 @@ vt52_curses::map_output(const char* output, int len) = utf8_char_to_byte_index(line_string, this->vc_x); for (int esc_index = 0; esc_index < this->vc_escape_len; - esc_index++) { + esc_index++) + { if (x_byte_index < this->vc_line.length()) { line_string[x_byte_index] = this->vc_escape[esc_index]; @@ -225,7 +226,8 @@ vt52_curses::map_output(const char* output, int len) this->vc_escape_len = 0; } } else if ((cap = vt52_escape_map::singleton()[this->vc_escape]) - != nullptr) { + != nullptr) + { this->vc_escape_len = 0; if (strcmp(cap, "ce") == 0) { this->vc_line.erase_utf8_chars(this->vc_x); diff --git a/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out index a462406e..94da04f7 100644 --- a/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out +++ b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out @@ -709,9 +709,9 @@ lnav@googlegroups.com[1] support@lnav.org[2] Parameter msg The message to display See Also - :echo, :eval, :export-session-to, :redirect-to, :write-csv-to, - :write-json-to, :write-jsonlines-to, :write-raw-to, :write-screen-to, - :write-table-to, :write-to, :write-view-to + :echo, :eval, :export-session-to, :rebuild, :redirect-to, + :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to, + :write-screen-to, :write-table-to, :write-to, :write-view-to Example #1 To display 'Press t to switch to the text view' on the bottom right: :alt-msg Press t to switch to the text view  @@ -940,11 +940,11 @@ lnav@googlegroups.com[1] support@lnav.org[2] msg The message to display See Also :alt-msg, :append-to, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-json-to, :write-json-to, :write-jsonlines-to, - :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to, - :write-screen-to, :write-table-to, :write-table-to, :write-to, - :write-to, :write-view-to, :write-view-to, echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, + :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, + :write-screen-to, :write-screen-to, :write-table-to, :write-table-to, + :write-to, :write-to, :write-view-to, :write-view-to, echoln() Example #1 To output 'Hello, World!': :echo Hello, World!  @@ -979,9 +979,9 @@ lnav@googlegroups.com[1] support@lnav.org[2] Parameter command The command or query to perform substitution on. See Also - :alt-msg, :echo, :export-session-to, :redirect-to, :write-csv-to, - :write-json-to, :write-jsonlines-to, :write-raw-to, :write-screen-to, - :write-table-to, :write-to, :write-view-to + :alt-msg, :echo, :export-session-to, :rebuild, :redirect-to, + :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to, + :write-screen-to, :write-table-to, :write-to, :write-view-to Example #1 To substitute the table name from a variable: :eval ;SELECT * FROM ${table}  @@ -995,7 +995,7 @@ lnav@googlegroups.com[1] support@lnav.org[2] path The path to the file to write See Also :alt-msg, :append-to, :echo, :echo, :eval, :pipe-line-to, :pipe-to, - :redirect-to, :redirect-to, :write-csv-to, :write-csv-to, + :rebuild, :redirect-to, :redirect-to, :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to, :write-table-to, :write-table-to, :write-to, @@ -1331,6 +1331,14 @@ lnav@googlegroups.com[1] support@lnav.org[2] Quit lnav +:rebuild +══════════════════════════════════════════════════════════════════════ + Forcefully rebuild file indexes +See Also + :alt-msg, :echo, :eval, :export-session-to, :redirect-to, + :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to, + :write-screen-to, :write-table-to, :write-to, :write-view-to + :redirect-to [path] ══════════════════════════════════════════════════════════════════════ Redirect the output of commands that write to stdout to the given @@ -1340,7 +1348,7 @@ lnav@googlegroups.com[1] support@lnav.org[2] current redirect will be cleared See Also :alt-msg, :append-to, :echo, :echo, :eval, :export-session-to, - :export-session-to, :pipe-line-to, :pipe-to, :write-csv-to, + :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to, :write-table-to, :write-table-to, :write-to, @@ -1569,12 +1577,13 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, - :write-json-to, :write-jsonlines-to, :write-jsonlines-to, - :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-raw-to, - :write-screen-to, :write-screen-to, :write-screen-to, :write-to, - :write-to, :write-view-to, :write-view-to, :write-view-to, echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to, + :write-json-to, :write-json-to, :write-jsonlines-to, + :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, + :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to, + :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to, + echoln() Example #1 To write SQL results as text to /tmp/table.txt: :write-table-to /tmp/table.txt  @@ -1589,8 +1598,8 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-json-to, - :write-json-to, :write-json-to, :write-jsonlines-to, + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to, :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to, :write-table-to, :write-table-to, :write-table-to, :write-to, @@ -1609,12 +1618,12 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-csv-to, :write-jsonlines-to, :write-jsonlines-to, - :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-raw-to, - :write-screen-to, :write-screen-to, :write-screen-to, :write-table-to, - :write-table-to, :write-table-to, :write-to, :write-to, :write-view-to, - :write-view-to, :write-view-to, echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-csv-to, :write-jsonlines-to, + :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, + :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to, + :write-table-to, :write-table-to, :write-table-to, :write-to, + :write-to, :write-view-to, :write-view-to, :write-view-to, echoln() Example #1 To write SQL results as JSON to /tmp/table.json: :write-json-to /tmp/table.json  @@ -1629,12 +1638,12 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, - :write-json-to, :write-raw-to, :write-raw-to, :write-raw-to, - :write-screen-to, :write-screen-to, :write-screen-to, :write-table-to, - :write-table-to, :write-table-to, :write-to, :write-to, :write-view-to, - :write-view-to, :write-view-to, echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to, + :write-json-to, :write-json-to, :write-raw-to, :write-raw-to, + :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to, + :write-table-to, :write-table-to, :write-table-to, :write-to, + :write-to, :write-view-to, :write-view-to, :write-view-to, echoln() Example #1 To write SQL results as JSON Lines to /tmp/table.json: :write-jsonlines-to /tmp/table.json  @@ -1653,13 +1662,13 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, - :write-json-to, :write-jsonlines-to, :write-jsonlines-to, - :write-jsonlines-to, :write-screen-to, :write-screen-to, - :write-screen-to, :write-table-to, :write-table-to, :write-table-to, - :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to, - echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to, + :write-json-to, :write-json-to, :write-jsonlines-to, + :write-jsonlines-to, :write-jsonlines-to, :write-screen-to, + :write-screen-to, :write-screen-to, :write-table-to, :write-table-to, + :write-table-to, :write-to, :write-to, :write-view-to, :write-view-to, + :write-view-to, echoln() Example #1 To write the marked lines in the log view to /tmp/table.txt: :write-raw-to /tmp/table.txt  @@ -1675,12 +1684,13 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, - :write-json-to, :write-jsonlines-to, :write-jsonlines-to, - :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-raw-to, - :write-table-to, :write-table-to, :write-table-to, :write-to, - :write-to, :write-view-to, :write-view-to, :write-view-to, echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to, + :write-json-to, :write-json-to, :write-jsonlines-to, + :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, + :write-raw-to, :write-table-to, :write-table-to, :write-table-to, + :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to, + echoln() Example #1 To write only the displayed text to /tmp/table.txt: :write-screen-to /tmp/table.txt  @@ -1695,12 +1705,13 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, - :write-json-to, :write-jsonlines-to, :write-jsonlines-to, - :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-raw-to, - :write-screen-to, :write-screen-to, :write-screen-to, :write-to, - :write-to, :write-view-to, :write-view-to, :write-view-to, echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to, + :write-json-to, :write-json-to, :write-jsonlines-to, + :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, + :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to, + :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to, + echoln() Example #1 To write SQL results as text to /tmp/table.txt: :write-table-to /tmp/table.txt  @@ -1714,7 +1725,7 @@ lnav@googlegroups.com[1] support@lnav.org[2] path The path to the file to write See Also :alt-msg, :append-to, :echo, :echo, :eval, :export-session-to, - :export-session-to, :pipe-line-to, :pipe-to, :redirect-to, + :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to, @@ -1735,12 +1746,13 @@ lnav@googlegroups.com[1] support@lnav.org[2] See Also :alt-msg, :append-to, :create-logline-table, :create-search-table, :echo, :echo, :eval, :export-session-to, :export-session-to, - :pipe-line-to, :pipe-to, :redirect-to, :redirect-to, :write-csv-to, - :write-csv-to, :write-csv-to, :write-json-to, :write-json-to, - :write-json-to, :write-jsonlines-to, :write-jsonlines-to, - :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-raw-to, - :write-screen-to, :write-screen-to, :write-screen-to, :write-table-to, - :write-table-to, :write-table-to, :write-to, :write-to, echoln() + :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, + :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to, + :write-json-to, :write-json-to, :write-jsonlines-to, + :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to, + :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to, + :write-table-to, :write-table-to, :write-table-to, :write-to, + :write-to, echoln() Example #1 To write the top view to /tmp/table.txt: :write-view-to /tmp/table.txt  diff --git a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out index 5d259549..21ce8ae6 100644 --- a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out +++ b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out @@ -1,10 +1,16 @@ - +#!lnav -Nf # This file is an export of an lnav session. You can type # '|/path/to/this/file' in lnav to execute this file and # restore the state of the session. -# + +;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.0' || ' or later') + WHERE lnav_version() < '0.11.0' COLLATE naturalcase + # The files loaded into the session were: -# {test_dir}/logfile_access_log.0 + +:open {test_dir}/logfile_access_log.0 +:rebuild + # The following SQL statements will restore the bookmarks, # comments, and tags that were added in the session.