mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 05:13:10 +00:00
Have the pager use a simple newline count to determine reserved lines
When the pager wants to use the full screen to show many options, it reserves space at the top to see the command. Previously it pretended the command was a prompt and engaged the prompt layout mechanism to compute these lines. Instead let's juts count newlines since escape sequences within commands are very rare.
This commit is contained in:
parent
27c1c06ed4
commit
a87970fbb5
3 changed files with 6 additions and 8 deletions
|
@ -434,11 +434,12 @@ static void reader_repaint() {
|
|||
std::vector<int> indents = data->indents;
|
||||
indents.resize(len);
|
||||
|
||||
// Re-render our completions page if necessary. We set the term size to less than the true
|
||||
// term height by the number of prompt lines. This means we will always show the entire line of
|
||||
// the prompt.
|
||||
// Re-render our completions page if necessary. Limit the term size of the pager to the true
|
||||
// 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.begin(), full_line.end(), '\n');
|
||||
data->pager.set_term_size(maxi(1, common_get_width()),
|
||||
maxi(1, common_get_height() - (int)calc_prompt_lines(full_line)));
|
||||
maxi(1, common_get_height() - full_line_count));
|
||||
data->pager.update_rendering(&data->current_page_rendering);
|
||||
|
||||
bool focused_on_pager = data->active_edit_line() == &data->pager.search_field_line;
|
||||
|
|
|
@ -346,7 +346,7 @@ static prompt_layout_t calc_prompt_layout(const wchar_t *prompt, prompt_type_t w
|
|||
return prompt_layout;
|
||||
}
|
||||
|
||||
size_t calc_prompt_lines(const wcstring &prompt) {
|
||||
static size_t calc_prompt_lines(const wcstring &prompt) {
|
||||
// Hack for the common case where there's no newline at all. I don't know if a newline can
|
||||
// appear in an escape sequence, so if we detect a newline we have to defer to
|
||||
// calc_prompt_width_and_lines.
|
||||
|
|
|
@ -240,7 +240,4 @@ class cached_esc_sequences_t {
|
|||
// change by calling `cached_esc_sequences.clear()`.
|
||||
extern cached_esc_sequences_t cached_esc_sequences;
|
||||
|
||||
// Calculates the number of prompt lines.
|
||||
size_t calc_prompt_lines(const wcstring &prompt);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue