Skip to content

Commit b2e2d6e

Browse files
committed
[pager] check actual window size when switching to cat mode
Related #1605
1 parent b67a6f9 commit b2e2d6e

File tree

1 file changed

+38
-34
lines changed

1 file changed

+38
-34
lines changed

src/lnav.cc

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include <stdio.h>
3838
#include <stdlib.h>
3939
#include <string.h>
40+
#include <sys/ioctl.h>
4041
#include <sys/stat.h>
4142
#include <sys/time.h>
4243
#include <sys/wait.h>
@@ -1483,8 +1484,7 @@ VALUES ('org.lnav.mouse-support', -1, DATETIME('now', '+1 minute'),
14831484

14841485
lnav_data.ld_views[LNV_LOG].get_highlights()[{
14851486
highlight_source_t::CONFIGURATION,
1486-
format->get_name().to_string() + "-" + hl.h_name}]
1487-
= hl;
1487+
format->get_name().to_string() + "-" + hl.h_name}] = hl;
14881488
}
14891489
}
14901490
}
@@ -1519,7 +1519,9 @@ VALUES ('org.lnav.mouse-support', -1, DATETIME('now', '+1 minute'),
15191519
= bind_mem(&lnav::prompt::rl_external_edit, &prompt);
15201520
}
15211521

1522-
lnav_data.ld_view_stack.push_back(&lnav_data.ld_views[LNV_LOG]);
1522+
if (lnav_data.ld_view_stack.empty()) {
1523+
lnav_data.ld_view_stack.push_back(&lnav_data.ld_views[LNV_LOG]);
1524+
}
15231525

15241526
sb.push_back(clear_last_user_mark);
15251527
sb.push_back(update_view_position);
@@ -1727,23 +1729,20 @@ VALUES ('org.lnav.mouse-support', -1, DATETIME('now', '+1 minute'),
17271729
.on_click
17281730
= [](status_field&) { ensure_view(&lnav_data.ld_views[LNV_HELP]); };
17291731
lnav_data.ld_bottom_source.get_field(bottom_status_source::BSF_LINE_NUMBER)
1730-
.on_click
1731-
= [](status_field&) {
1732-
auto cmd = fmt::format(
1733-
FMT_STRING("prompt command : 'goto {}'"),
1734-
(int) lnav_data.ld_view_stack.top().value()->get_top());
1732+
.on_click = [](status_field&) {
1733+
auto cmd = fmt::format(
1734+
FMT_STRING("prompt command : 'goto {}'"),
1735+
(int) lnav_data.ld_view_stack.top().value()->get_top());
17351736

1736-
execute_command(lnav_data.ld_exec_context, cmd);
1737-
};
1737+
execute_command(lnav_data.ld_exec_context, cmd);
1738+
};
17381739
lnav_data.ld_bottom_source.get_field(bottom_status_source::BSF_SEARCH_TERM)
1739-
.on_click
1740-
= [](status_field&) {
1741-
auto term
1742-
= lnav_data.ld_view_stack.top().value()->get_current_search();
1743-
auto cmd = fmt::format(FMT_STRING("prompt search / '{}'"), term);
1740+
.on_click = [](status_field&) {
1741+
auto term = lnav_data.ld_view_stack.top().value()->get_current_search();
1742+
auto cmd = fmt::format(FMT_STRING("prompt search / '{}'"), term);
17441743

1745-
execute_command(lnav_data.ld_exec_context, cmd);
1746-
};
1744+
execute_command(lnav_data.ld_exec_context, cmd);
1745+
};
17471746

17481747
lnav_data.ld_status[LNS_TOP].set_title("top");
17491748
lnav_data.ld_status[LNS_TOP].set_y(0);
@@ -1768,12 +1767,11 @@ VALUES ('org.lnav.mouse-support', -1, DATETIME('now', '+1 minute'),
17681767
&lnav_data.ld_doc_status_source);
17691768
lnav_data.ld_preview_status_source[0]
17701769
.statusview_value_for_field(preview_status_source::TSF_TOGGLE)
1771-
.on_click
1772-
= [](status_field&) {
1773-
lnav_data.ld_preview_status_source->update_toggle_msg(
1774-
lnav_data.ld_preview_hidden);
1775-
lnav_data.ld_preview_hidden = !lnav_data.ld_preview_hidden;
1776-
};
1770+
.on_click = [](status_field&) {
1771+
lnav_data.ld_preview_status_source->update_toggle_msg(
1772+
lnav_data.ld_preview_hidden);
1773+
lnav_data.ld_preview_hidden = !lnav_data.ld_preview_hidden;
1774+
};
17771775
lnav_data.ld_status[LNS_PREVIEW0].set_title("preview0");
17781776
lnav_data.ld_status[LNS_PREVIEW0].set_data_source(
17791777
&lnav_data.ld_preview_status_source[0]);
@@ -2751,6 +2749,12 @@ main(int argc, char* argv[])
27512749
std::string since_time;
27522750
std::string until_time;
27532751
const char* LANG = getenv("LANG");
2752+
winsize term_size{};
2753+
2754+
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &term_size) != 0) {
2755+
term_size.ws_col = 80;
2756+
term_size.ws_row = 24;
2757+
}
27542758

27552759
if (LANG == nullptr || strcmp(LANG, "C") == 0) {
27562760
setenv("LANG", "en_US.UTF-8", 1);
@@ -2828,15 +2832,14 @@ main(int argc, char* argv[])
28282832
auto_mem<char> var_path;
28292833

28302834
var_path = realpath("/var/log", nullptr);
2831-
options_coll.foc_pattern_to_options[fmt::format(FMT_STRING("{}/*"),
2832-
var_path.in())]
2833-
= lnav::file_options{
2834-
{
2835-
intern_string_t{},
2836-
source_location{},
2837-
curr_tz,
2838-
},
2839-
};
2835+
options_coll.foc_pattern_to_options[fmt::format(
2836+
FMT_STRING("{}/*"), var_path.in())] = lnav::file_options{
2837+
{
2838+
intern_string_t{},
2839+
source_location{},
2840+
curr_tz,
2841+
},
2842+
};
28402843
options_hier->foh_path_to_collection.emplace(std::filesystem::path("/"),
28412844
options_coll);
28422845
} catch (const std::runtime_error& e) {
@@ -4152,7 +4155,7 @@ SELECT tbl_name FROM sqlite_master WHERE sql LIKE 'CREATE VIRTUAL TABLE%'
41524155
}
41534156

41544157
if (!lnav_data.ld_flags.is_set<lnav_flags::headless>()
4155-
&& verbosity == verbosity_t::quiet && load_stdin
4158+
&& verbosity == verbosity_t::quiet
41564159
&& lnav_data.ld_active_files.fc_file_names.size() == 1)
41574160
{
41584161
log_info("pager mode, waiting for input to be consumed");
@@ -4170,7 +4173,8 @@ SELECT tbl_name FROM sqlite_master WHERE sql LIKE 'CREATE VIRTUAL TABLE%'
41704173
log_info(" input fully consumed");
41714174
rebuild_indexes_repeatedly();
41724175
if (lnav_data.ld_active_files.fc_files.empty()
4173-
|| lnav_data.ld_active_files.fc_files[0]->size() < 24)
4176+
|| lnav_data.ld_active_files.fc_files[0]->size()
4177+
< term_size.ws_row - 3)
41744178
{
41754179
log_info(" input is smaller than screen, not paging");
41764180
lnav_data.ld_flags.set<lnav_flags::headless>();

0 commit comments

Comments
 (0)