[session] some improvements to session export

This commit is contained in:
Tim Stack 2022-08-03 10:55:18 -07:00
parent c6d7206a1e
commit 056754a926
15 changed files with 219 additions and 175 deletions

View File

@ -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;
}

View File

@ -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<int, int> 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;

View File

@ -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`
----

View File

@ -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;

View File

@ -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 {

View File

@ -1327,7 +1327,7 @@ looper()
"command <cmd>",
encoded_name,
keyseq));
alerter::singleton().chime();
alerter::singleton().chime("unrecognized key");
};
}

View File

@ -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;

View File

@ -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<log_message_session_state>(

View File

@ -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;
}

View File

@ -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;

View File

@ -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<void(T*)> vs_change_handler;

View File

@ -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<vis_line_t> (bookmark_vector<vis_line_t>::*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");
}
}

View File

@ -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);

View File

@ -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 

View File

@ -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.