Skip to content

Commit

Permalink
Fix completion doc popup area calculation logic
Browse files Browse the repository at this point in the history
Earlier the doc popup would draw over the compeltion popup
itself and sometimes over the cursor too.
  • Loading branch information
sudormrfbin authored and archseer committed Feb 11, 2023
1 parent 1562b5c commit 425315d
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions helix-term/src/ui/completion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 425315d

Please sign in to comment.