several fixes

This commit is contained in:
Jan Hrastnik 2020-10-24 13:36:34 +02:00
parent 8f37c26f35
commit a123cf37a0
2 changed files with 20 additions and 32 deletions

View file

@ -237,8 +237,7 @@ impl Renderer {
pub fn render_prompt(&mut self, view: &View, prompt: &Prompt) {
// completion
if prompt.completion.is_some() {
let completion = prompt.completion.clone().unwrap();
if let Some(completion) = &prompt.completion {
// TODO: find out better way of clearing individual lines of the screen
for i in (3..7) {
self.surface.set_string(
@ -253,23 +252,16 @@ impl Renderer {
view.theme.get("ui.statusline"),
);
for i in (0..completion.len()) {
let color;
if prompt.completion_selection_index.is_some()
&& i == prompt.completion_selection_index.unwrap()
{
self.surface.set_string(
1,
self.size.1 - 6 + i as u16,
&completion[i],
Style::default().bg(Color::Rgb(104, 060, 232)),
);
color = Style::default().bg(Color::Rgb(104, 060, 232));
} else {
self.surface.set_string(
1,
self.size.1 - 6 + i as u16,
&completion[i],
self.text_color,
);
color = self.text_color;
}
self.surface
.set_string(1, self.size.1 - 6 + i as u16, &completion[i], color);
}
}
// render buffer text
@ -420,25 +412,18 @@ impl Application {
..
}] = keys.as_slice()
{
let command_list = vec![
String::from("q"),
String::from("aaa"),
String::from("bbb"),
String::from("ccc"),
];
let prompt = Prompt::new(
":".to_owned(),
|_input: &str| {
let mut matches = vec![];
// TODO: i need this duplicate list right now to avoid borrow checker issues
let placeholder_list = vec![
let command_list = vec![
String::from("q"),
String::from("aaa"),
String::from("bbb"),
String::from("ccc"),
];
for command in placeholder_list {
for command in command_list {
if command.contains(_input) {
matches.push(command);
}
@ -452,7 +437,6 @@ impl Application {
"q" => editor.should_close = true,
_ => (),
},
command_list,
);
self.prompt = Some(prompt);

View file

@ -16,15 +16,14 @@ pub struct Prompt {
impl Prompt {
pub fn new(
prompt: String,
completion_fn: impl FnMut(&str) -> Option<Vec<String>> + 'static,
mut completion_fn: impl FnMut(&str) -> Option<Vec<String>> + 'static,
callback_fn: impl FnMut(&mut Editor, &str) + 'static,
command_list: Vec<String>,
) -> Prompt {
Prompt {
prompt,
line: String::new(),
cursor: 0,
completion: Some(command_list),
completion: completion_fn(""),
should_close: false,
completion_selection_index: None,
completion_fn: Box::new(completion_fn),
@ -67,11 +66,16 @@ impl Prompt {
}
pub fn change_completion_selection(&mut self) {
if self.completion_selection_index.is_none() {
self.completion_selection_index = Some(0)
} else {
self.completion_selection_index = Some(self.completion_selection_index.unwrap() + 1)
}
self.completion_selection_index = self
.completion_selection_index
.map(|i| {
if i == self.completion.as_ref().unwrap().len() - 1 {
0
} else {
i + 1
}
})
.or(Some(0))
}
pub fn handle_input(&mut self, key_event: KeyEvent, editor: &mut Editor) {