added col_height calculation

This commit is contained in:
Jan Hrastnik 2020-11-13 00:07:21 +01:00
parent 2b44031929
commit 1a3c647adf
2 changed files with 15 additions and 26 deletions

View file

@ -241,7 +241,12 @@ impl Renderer {
// completion // completion
if !prompt.completion.is_empty() { if !prompt.completion.is_empty() {
// TODO: find out better way of clearing individual lines of the screen // 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( self.surface.set_string(
0, 0,
self.size.1 - i as u16, self.size.1 - i as u16,
@ -250,14 +255,9 @@ impl Renderer {
); );
} }
self.surface.set_style( 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"), 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() { for (i, command) in prompt.completion.iter().enumerate() {
let color = if prompt.completion_selection_index.is_some() let color = if prompt.completion_selection_index.is_some()
&& i == prompt.completion_selection_index.unwrap() && i == prompt.completion_selection_index.unwrap()
@ -268,13 +268,13 @@ impl Renderer {
}; };
self.surface.set_stringn( self.surface.set_stringn(
1 + col * BASE_WIDTH, 1 + col * BASE_WIDTH,
self.size.1 - 6 + row as u16, self.size.1 - col_height - 2 + row,
&command, &command,
BASE_WIDTH as usize - 1, BASE_WIDTH as usize - 1,
color, color,
); );
row += 1; row += 1;
if row > 3 { if row > col_height - 1 {
row = 0; row = 0;
col += 1; col += 1;
} }

View file

@ -68,25 +68,14 @@ impl Prompt {
} }
pub fn change_completion_selection(&mut self) { pub fn change_completion_selection(&mut self) {
if !self.completion.is_empty() { if self.completion.is_empty() {
self.completion_selection_index = self return;
.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(),
);
} }
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) { pub fn exit_selection(&mut self) {
self.completion_selection_index = None; self.completion_selection_index = None;
} }