Unnamed repository; edit this file 'description' to name the repository.
Fix completion doc popup area calculation logic
Earlier the doc popup would draw over the compeltion popup
itself and sometimes over the cursor too.
| -rw-r--r-- | helix-term/src/ui/completion.rs | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs index 3d354bda..ac434894 100644 --- a/helix-term/src/ui/completion.rs +++ b/helix-term/src/ui/completion.rs @@ -453,19 +453,25 @@ impl Component for Completion { } Rect::new(x, y, doc_width, doc_height) } else { - let half = area.height / 2; - let doc_height = 15.min(half); - // we want to make sure the cursor is visible (not hidden behind the documentation) - let y = if cursor_pos + area.y - >= (cx.editor.tree.area().height - doc_height - 2/* statusline + commandline */) - { - 0 + // Documentation should not cover the cursor or the completion popup + // Completion popup could be above or below the current line + let avail_height_above = cursor_pos.min(popup_area.top()).saturating_sub(1); + let avail_height_below = area + .height + .saturating_sub(cursor_pos.max(popup_area.bottom()) + 1 /* padding */); + let (y, avail_height) = if avail_height_below >= avail_height_above { + ( + area.height.saturating_sub(avail_height_below), + avail_height_below, + ) } else { - // -2 to subtract command line + statusline. a bit of a hack, because of splits. - area.height.saturating_sub(doc_height).saturating_sub(2) + (0, avail_height_above) }; + if avail_height <= 1 { + return; + } - Rect::new(0, y, area.width, doc_height) + Rect::new(0, y, area.width, avail_height.min(15)) }; // clear area |