1
0
Fork 0
mirror of https://github.com/helix-editor/helix synced 2024-06-07 21:56:04 +02:00

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 @@ pub fn render_prompt(&mut self, view: &View, prompt: &Prompt) {
// 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 @@ pub fn render_prompt(&mut self, view: &View, prompt: &Prompt) {
);
}
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 @@ pub fn render_prompt(&mut self, view: &View, prompt: &Prompt) {
};
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;
}

View File

@ -68,25 +68,14 @@ pub fn delete_char_backwards(&mut self) {
}
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;
}