show unsaved changes

This commit is contained in:
Crispy 2023-03-01 22:40:57 +01:00
parent 5ece5b7198
commit 1b3dc37623
2 changed files with 16 additions and 1 deletions

View file

@ -25,6 +25,7 @@ pub struct Editor {
clipboard: Clipboard, clipboard: Clipboard,
path: Option<String>, path: Option<String>,
active: bool, active: bool,
unsaved_changes: bool,
} }
#[derive(Debug)] #[derive(Debug)]
@ -48,6 +49,7 @@ impl Editor {
clipboard, clipboard,
path: Some(path), path: Some(path),
active: false, active: false,
unsaved_changes: false,
}; };
this.find_lines(); this.find_lines();
this this
@ -63,6 +65,7 @@ impl Editor {
clipboard, clipboard,
path: None, path: None,
active: false, active: false,
unsaved_changes: true,
} }
} }
@ -70,6 +73,10 @@ impl Editor {
self.path.as_ref().map_or("untitled", |s| s) self.path.as_ref().map_or("untitled", |s| s)
} }
pub fn has_unsaved_changes(&self) -> bool {
self.unsaved_changes
}
pub fn open(&mut self) { pub fn open(&mut self) {
self.active = true; self.active = true;
@ -258,6 +265,7 @@ impl Editor {
} }
fn insert_char(&mut self, ch: char) { fn insert_char(&mut self, ch: char) {
self.unsaved_changes = true;
// eprintln!("inserting {ch} at {}", self.index()); // eprintln!("inserting {ch} at {}", self.index());
self.text.insert(self.char_index(), ch); self.text.insert(self.char_index(), ch);
self.find_lines(); self.find_lines();
@ -305,6 +313,7 @@ impl Editor {
} }
fn paste(&mut self) { fn paste(&mut self) {
self.unsaved_changes = true;
let cursor = self.char_index(); let cursor = self.char_index();
self.text.insert_str(cursor, &self.clipboard.get()); self.text.insert_str(cursor, &self.clipboard.get());
self.find_lines(); self.find_lines();
@ -352,6 +361,7 @@ impl Editor {
} }
let mut file = File::create(self.path.as_ref().unwrap()).unwrap(); let mut file = File::create(self.path.as_ref().unwrap()).unwrap();
file.write_all(self.text.as_bytes()).unwrap(); file.write_all(self.text.as_bytes()).unwrap();
self.unsaved_changes = false;
} }
} }

View file

@ -70,7 +70,12 @@ impl Navigator {
if Some(index) == self.selected { if Some(index) == self.selected {
print!("{}{}", color::Fg(color::Black), color::Bg(color::White)); print!("{}{}", color::Fg(color::Black), color::Bg(color::White));
} }
print!("{}{}", Goto(2, index as u16 + 2), editor.name()); print!(
"{}{}{}",
Goto(2, index as u16 + 2),
editor.has_unsaved_changes().then_some("*").unwrap_or(" "),
editor.name()
);
print!("{}{}", color::Fg(color::Reset), color::Bg(color::Reset)); print!("{}{}", color::Fg(color::Reset), color::Bg(color::Reset));
} }