Prototype tab complete ui

This commit is contained in:
Dheepak Krishnamurthy 2021-04-02 17:32:00 -06:00
parent 5303b800b9
commit fad1f37a8c
3 changed files with 102 additions and 1 deletions

61
src/completion.rs Normal file
View file

@ -0,0 +1,61 @@
use std::{error::Error, io};
use tui::{
layout::{Constraint, Corner, Direction, Layout},
style::{Color, Modifier, Style},
text::{Span, Spans},
widgets::{Block, Borders, List, ListItem, ListState},
Terminal,
};
pub struct CompletionList {
pub state: ListState,
pub items: Vec<String>,
}
impl CompletionList {
pub fn new() -> CompletionList {
CompletionList {
state: ListState::default(),
items: Vec::new(),
}
}
pub fn with_items(items: Vec<String>) -> CompletionList {
CompletionList {
state: ListState::default(),
items,
}
}
pub fn next(&mut self) {
let i = match self.state.selected() {
Some(i) => {
if i >= self.items.len() - 1 {
0
} else {
i + 1
}
}
None => 0,
};
self.state.select(Some(i));
}
pub fn previous(&mut self) {
let i = match self.state.selected() {
Some(i) => {
if i == 0 {
self.items.len() - 1
} else {
i - 1
}
}
None => 0,
};
self.state.select(Some(i));
}
pub fn unselect(&mut self) {
self.state.select(None);
}
}