diff --git a/src/fish_tests.cpp b/src/fish_tests.cpp index b54572cbc..9c45ad749 100644 --- a/src/fish_tests.cpp +++ b/src/fish_tests.cpp @@ -2201,7 +2201,7 @@ static void test_pager_navigation() { pager_t pager; pager.set_completions(completions); - pager.set_term_size(80, 24); + pager.set_term_size(termsize_t::defaults()); page_rendering_t render = pager.render(); if (render.term_width != 80) err(L"Wrong term width"); @@ -2275,14 +2275,14 @@ static void test_pager_navigation() { } struct pager_layout_testcase_t { - size_t width; + int width; const wchar_t *expected; // Run ourselves as a test case. // Set our data on the pager, and then check the rendering. // We should have one line, and it should have our expected text. void run(pager_t &pager) const { - pager.set_term_size(this->width, 24); + pager.set_term_size(termsize_t{this->width, 24}); page_rendering_t rendering = pager.render(); const screen_data_t &sd = rendering.screen_data; do_test(sd.line_count() == 1); diff --git a/src/pager.cpp b/src/pager.cpp index 78f3bb091..006062036 100644 --- a/src/pager.cpp +++ b/src/pager.cpp @@ -393,9 +393,9 @@ void pager_t::set_completions(const completion_list_t &raw_completions) { void pager_t::set_prefix(const wcstring &pref) { prefix = pref; } -void pager_t::set_term_size(size_t w, size_t h) { - available_term_width = w; - available_term_height = h; +void pager_t::set_term_size(termsize_t ts) { + available_term_width = ts.width > 0 ? ts.width : 0; + available_term_height = ts.height > 0 ? ts.height : 0; } /// Try to print the list of completions lst with the prefix prefix using cols as the number of diff --git a/src/pager.h b/src/pager.h index e6a8bcfc4..8160df1ce 100644 --- a/src/pager.h +++ b/src/pager.h @@ -12,6 +12,7 @@ #include "complete.h" #include "reader.h" #include "screen.h" +#include "termsize.h" #define PAGER_SELECTION_NONE static_cast<size_t>(-1) @@ -146,8 +147,8 @@ class pager_t { // Sets the prefix. void set_prefix(const wcstring &pref); - // Sets the terminal width and height. - void set_term_size(size_t w, size_t h); + // Sets the terminal size. + void set_term_size(termsize_t ts); // Changes the selected completion in the given direction according to the layout of the given // rendering. Returns true if the selection changed. diff --git a/src/reader.cpp b/src/reader.cpp index 29151ebf0..68127f60b 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -791,8 +791,9 @@ void reader_data_t::repaint() { // term size, minus the number of lines consumed by our string. (Note this doesn't yet consider // wrapping). int full_line_count = 1 + std::count(full_line.cbegin(), full_line.cend(), L'\n'); - pager.set_term_size(std::max(1, common_get_width()), - std::max(1, common_get_height() - full_line_count)); + termsize_t curr_termsize = termsize_last(); + pager.set_term_size(termsize_t{std::max(1, curr_termsize.width), + std::max(1, curr_termsize.height - full_line_count)}); pager.update_rendering(¤t_page_rendering); bool focused_on_pager = active_edit_line() == &pager.search_field_line;