diff --git a/src/editor.rs b/src/editor.rs index 9667788..1f7f665 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -42,9 +42,9 @@ struct Cursor { type Line = Range; impl Editor { - pub fn open_file(clipboard: Clipboard, path: PathBuf) -> std::io::Result { - let text = fs::read_to_string(&path)?; - Ok(Editor { + pub fn open_file(clipboard: Clipboard, path: PathBuf) -> Option { + let text = fs::read_to_string(&path).ok()?; + Some(Editor { text, lines: Vec::new(), scroll: 0, diff --git a/src/main.rs b/src/main.rs index c707b6e..df4e011 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ use crossterm::{ execute, queue, style::{Color, Colors, ResetColor, SetColors}, terminal::{ - self, disable_raw_mode, enable_raw_mode, Clear, ClearType, EnterAlternateScreen, + disable_raw_mode, enable_raw_mode, Clear, ClearType, EnterAlternateScreen, LeaveAlternateScreen, }, }; @@ -33,7 +33,6 @@ struct Navigator { path: PathBuf, init_path: PathBuf, immediate_open: bool, - message: Option, } impl Navigator { @@ -50,7 +49,7 @@ impl Navigator { path = arg.canonicalize().unwrap(); break; } else if arg.is_file() { - if let Ok(editor) = Editor::open_file(clipboard.clone(), arg) { + if let Some(editor) = Editor::open_file(clipboard.clone(), arg) { editors.push(editor); } } else { @@ -69,7 +68,6 @@ impl Navigator { init_path: path.clone(), path, immediate_open, - message: None, } } @@ -84,7 +82,6 @@ impl Navigator { loop { self.get_files(); self.draw(); - self.message = None; self.input(); } } @@ -126,11 +123,6 @@ impl Navigator { queue!(stdout(), ResetColor).unwrap(); } - if let Some(text) = &self.message { - queue!(stdout(), MoveTo(0, terminal::size().unwrap().1)).unwrap(); - print!("{text}"); - } - stdout().flush().unwrap(); } @@ -152,10 +144,6 @@ impl Navigator { } } - fn message(&mut self, text: String) { - self.message = Some(text); - } - fn nav_up(&mut self) { self.selected = self.selected.saturating_sub(1); } @@ -171,52 +159,39 @@ impl Navigator { let i = self.selected - self.editors.len(); if i == 0 { if let Some(parent) = self.path.parent() { - self.set_path(self.path.join(parent)); + self.path = parent.to_owned(); + env::set_current_dir(&self.path).unwrap(); } } else { let path = &self.files[i]; if path.is_dir() { - self.set_path(self.path.join(path)); + self.path = self.path.join(path); + env::set_current_dir(&self.path).unwrap(); + self.selected = self.editors.len(); } else if path.is_file() { let path = path.canonicalize().unwrap(); - let mut editor_index = self.editors.len(); + self.selected = self.editors.len(); for (i, editor) in self.editors.iter().enumerate() { if editor.path() == Some(&path) { - editor_index = i; + self.selected = i; break; } } - if editor_index == self.editors.len() { - match Editor::open_file( - self.clipboard.clone(), - path.canonicalize().unwrap(), - ) { - Ok(editor) => self.editors.push(editor), - Err(err) => { - self.message(format!("Could not open file: {err}")); - return; - } + if self.selected == self.editors.len() { + if let Some(editor) = + Editor::open_file(self.clipboard.clone(), path.canonicalize().unwrap()) + { + self.editors.push(editor); + } else { + return; } } - self.selected = editor_index; self.open_selected(); } } } } - fn set_path(&mut self, new_path: PathBuf) { - match env::set_current_dir(&new_path) { - Ok(()) => { - self.path = new_path; - self.selected = self.editors.len(); - } - Err(err) => { - self.message(format!("Could not navigate to directory: {err}")); - } - } - } - fn open_selected(&mut self) { if self.selected < self.editors.len() { self.editors[self.selected].enter();