Save file (#19)
This commit is contained in:
parent
0ae805faec
commit
96597983fb
@ -6,7 +6,8 @@ use crate::ui::*;
|
|||||||
use rider_config::*;
|
use rider_config::*;
|
||||||
use sdl2::rect::Point;
|
use sdl2::rect::Point;
|
||||||
use sdl2::VideoSubsystem as VS;
|
use sdl2::VideoSubsystem as VS;
|
||||||
use std::fs::read_to_string;
|
use std::fs::{read_to_string, File};
|
||||||
|
use std::io::Write;
|
||||||
use std::sync::*;
|
use std::sync::*;
|
||||||
|
|
||||||
pub struct AppState {
|
pub struct AppState {
|
||||||
@ -47,6 +48,23 @@ impl AppState {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn save_file(&self) -> Result<(), String> {
|
||||||
|
println!("Saving file...");
|
||||||
|
let editor_file = match self.file_editor.file() {
|
||||||
|
Some(f) => f,
|
||||||
|
_ => Err("No buffer found".to_string())?,
|
||||||
|
};
|
||||||
|
let mut f = File::create(editor_file.path())
|
||||||
|
.or_else(|_| Err("File can't be opened".to_string()))?;
|
||||||
|
|
||||||
|
f.write_all(editor_file.buffer().as_bytes())
|
||||||
|
.or_else(|_| Err("Failed to write to file".to_string()))?;
|
||||||
|
|
||||||
|
f.flush()
|
||||||
|
.or_else(|_| Err("Failed to write to file".to_string()))?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn open_directory<R>(&mut self, dir_path: String, renderer: &mut R)
|
pub fn open_directory<R>(&mut self, dir_path: String, renderer: &mut R)
|
||||||
where
|
where
|
||||||
R: Renderer + CharacterSizeManager,
|
R: Renderer + CharacterSizeManager,
|
||||||
|
@ -48,6 +48,7 @@ pub enum UpdateResult {
|
|||||||
OpenDirectory(String),
|
OpenDirectory(String),
|
||||||
OpenFileModal,
|
OpenFileModal,
|
||||||
FileDropped(String),
|
FileDropped(String),
|
||||||
|
SaveCurrentFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(tarpaulin, skip)]
|
#[cfg_attr(tarpaulin, skip)]
|
||||||
@ -201,6 +202,11 @@ impl Application {
|
|||||||
UpdateResult::MouseDragStart(_point) => (),
|
UpdateResult::MouseDragStart(_point) => (),
|
||||||
UpdateResult::MouseDragStop(_point) => (),
|
UpdateResult::MouseDragStop(_point) => (),
|
||||||
UpdateResult::FileDropped(_path) => (),
|
UpdateResult::FileDropped(_path) => (),
|
||||||
|
UpdateResult::SaveCurrentFile => {
|
||||||
|
app_state
|
||||||
|
.save_file()
|
||||||
|
.unwrap_or_else(|e| eprintln!("Failed to save {:?}", e));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.tasks = new_tasks;
|
self.tasks = new_tasks;
|
||||||
@ -286,6 +292,9 @@ impl Application {
|
|||||||
Keycode::O if left_control_pressed && !shift_pressed => {
|
Keycode::O if left_control_pressed && !shift_pressed => {
|
||||||
self.tasks.push(UpdateResult::OpenFileModal)
|
self.tasks.push(UpdateResult::OpenFileModal)
|
||||||
}
|
}
|
||||||
|
Keycode::S if left_control_pressed => {
|
||||||
|
self.tasks.push(UpdateResult::SaveCurrentFile)
|
||||||
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
Event::TextInput { text, .. } => {
|
Event::TextInput { text, .. } => {
|
||||||
|
Loading…
Reference in New Issue
Block a user