added col_height calculation
This commit is contained in:
parent
2b44031929
commit
1a3c647adf
2 changed files with 15 additions and 26 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue