diff options
author | Blaž Hrastnik | 2022-01-31 16:25:59 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2022-01-31 16:25:59 +0000 |
commit | 36b975c4ce2502391873a086b10b46941d295ee4 (patch) | |
tree | 5ea4d4bc3a58b778b074de69e0c4e14943d6aea4 /helix-term/src/ui/menu.rs | |
parent | f10a06f4def8af15516a4fe4ca35863b9aae3443 (diff) |
ui: menu: Don't allocate scrollbar space if options fit
Diffstat (limited to 'helix-term/src/ui/menu.rs')
-rw-r--r-- | helix-term/src/ui/menu.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/helix-term/src/ui/menu.rs b/helix-term/src/ui/menu.rs index f57acd8e..f9a0438c 100644 --- a/helix-term/src/ui/menu.rs +++ b/helix-term/src/ui/menu.rs @@ -139,7 +139,17 @@ impl<T: Item> Menu<T> { acc }); - let len = max_lens.iter().sum::<usize>() + n + 1; // +1: reserve some space for scrollbar + + let height = self.matches.len().min(10).min(viewport.1 as usize); + // do all the matches fit on a single screen? + let fits = self.matches.len() <= height; + + let mut len = max_lens.iter().sum::<usize>() + n; + + if !fits { + len += 1; // +1: reserve some space for scrollbar + } + let width = len.min(viewport.0 as usize); self.widths = max_lens @@ -147,8 +157,6 @@ impl<T: Item> Menu<T> { .map(|len| Constraint::Length(len as u16)) .collect(); - let height = self.matches.len().min(10).min(viewport.1 as usize); - self.size = (width as u16, height as u16); // adjust scroll offsets if size changed |