aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hrastnik2020-11-12 23:07:21 +0000
committerJan Hrastnik2020-11-12 23:07:21 +0000
commit1a3c647adf1f252478bf38537bde87f7e5f14ab0 (patch)
treeb419e4ac033207d20ec6ca176b20da072944f996
parent2b44031929c490298cfc29cdd055ca4f22bf4645 (diff)
added col_height calculation
-rw-r--r--helix-term/src/application.rs18
-rw-r--r--helix-view/src/prompt.rs23
2 files changed, 15 insertions, 26 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 2c0b34dc..1e719f5f 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -241,7 +241,12 @@ impl Renderer {
// completion
if !prompt.completion.is_empty() {
// TODO: find out better way of clearing individual lines of the screen
- for i in (3..7) {
+ let mut row = 0;
+ let mut col = 0;
+ let max_col = self.size.0 / BASE_WIDTH;
+ let col_height = ((prompt.completion.len() as u16 + max_col - 1) / max_col);
+
+ for i in (3..col_height + 3) {
self.surface.set_string(
0,
self.size.1 - i as u16,
@@ -250,14 +255,9 @@ impl Renderer {
);
}
self.surface.set_style(
- Rect::new(0, self.size.1 - 6, self.size.0, 4),
+ Rect::new(0, self.size.1 - col_height - 2, self.size.0, col_height),
view.theme.get("ui.statusline"),
);
- let mut row = 0;
- let mut col = 0;
- let max_col: u16 = self.size.0 / BASE_WIDTH;
- // TODO: this will crash if there are too many cols added
- // TODO: set char limit
for (i, command) in prompt.completion.iter().enumerate() {
let color = if prompt.completion_selection_index.is_some()
&& i == prompt.completion_selection_index.unwrap()
@@ -268,13 +268,13 @@ impl Renderer {
};
self.surface.set_stringn(
1 + col * BASE_WIDTH,
- self.size.1 - 6 + row as u16,
+ self.size.1 - col_height - 2 + row,
&command,
BASE_WIDTH as usize - 1,
color,
);
row += 1;
- if row > 3 {
+ if row > col_height - 1 {
row = 0;
col += 1;
}
diff --git a/helix-view/src/prompt.rs b/helix-view/src/prompt.rs
index 8186b476..e2a9c80d 100644
--- a/helix-view/src/prompt.rs
+++ b/helix-view/src/prompt.rs
@@ -68,25 +68,14 @@ impl Prompt {
}
pub fn change_completion_selection(&mut self) {
- if !self.completion.is_empty() {
- self.completion_selection_index = self
- .completion_selection_index
- .map(|i| {
- if i == self.completion.len() - 1 {
- 0
- } else {
- i + 1
- }
- })
- .or(Some(0));
- self.line = String::from(
- self.completion
- .get(self.completion_selection_index.unwrap())
- .unwrap(),
- );
+ if self.completion.is_empty() {
+ return;
}
+ let index =
+ self.completion_selection_index.map(|i| i + 1).unwrap_or(0) % self.completion.len();
+ self.completion_selection_index = Some(index);
+ self.line = self.completion[index].clone();
}
-
pub fn exit_selection(&mut self) {
self.completion_selection_index = None;
}