select between open editors, create new ones with ctrl+N

This commit is contained in:
Crispy 2023-02-28 20:38:20 +01:00
parent 7d1a2bc412
commit 8194ff2ec2
2 changed files with 30 additions and 5 deletions

View file

@ -108,11 +108,12 @@ impl Editor {
}
self.status_line();
print!(
"{}",
"{}{}",
cursor::Goto(
self.physical_column() as u16 + 1,
(self.cursor.line - self.scroll) as u16 + 1
)
),
cursor::Show
);
stdout().flush().unwrap();
}

View file

@ -5,7 +5,7 @@ use std::{
};
use termion::{
clear, color,
cursor::Goto,
cursor::{self, Goto},
event::{Event, Key},
input::TermRead,
raw::{IntoRawMode, RawTerminal},
@ -50,8 +50,9 @@ impl Navigator {
fn draw(&self) {
print!(
"{}{}Open editors: {}",
"{}{}{}Open editors: {}",
clear::All,
cursor::Hide,
Goto(1, 1),
self.editors.len()
);
@ -73,20 +74,43 @@ impl Navigator {
match key {
Key::Esc => self.quit(),
Key::Char('\n') => self.open_selected(),
Key::Ctrl('n') => self.new_editor(),
Key::Up => self.nav_up(),
Key::Down => self.nav_down(),
_ => (),
}
}
}
}
fn nav_up(&mut self) {
if self.selected > Some(0) {
self.selected = Some(self.selected.unwrap() - 1);
}
}
fn nav_down(&mut self) {
if let Some(index) = self.selected.as_mut() {
if *index < self.editors.len() - 1 {
*index += 1;
}
}
}
fn open_selected(&mut self) {
if let Some(index) = self.selected {
self.editors[index].open();
}
}
fn new_editor(&mut self) {
self.selected = Some(self.editors.len());
self.editors.push(Editor::new(None));
self.open_selected();
}
fn quit(&self) {
print!("{}", clear::All);
print!("{}{}", clear::All, cursor::Show);
exit(0);
}
}