Moved the rest of file loading/saving into Buffer.
This commit is contained in:
parent
8a077bf4d0
commit
2d50906f43
|
@ -3,9 +3,9 @@
|
|||
use std::mem;
|
||||
use std::old_path::Path;
|
||||
use std::old_io::fs::File;
|
||||
use std::old_io::{IoResult, BufferedReader};
|
||||
use std::old_io::{IoResult, BufferedReader, BufferedWriter};
|
||||
|
||||
use self::line::Line;
|
||||
use self::line::{Line, line_ending_to_str};
|
||||
use self::node::{BufferNode, BufferNodeGraphemeIter, BufferNodeLineIter};
|
||||
use self::undo_stack::{UndoStack};
|
||||
use self::undo_stack::Operation::*;
|
||||
|
@ -86,6 +86,18 @@ impl Buffer {
|
|||
}
|
||||
|
||||
|
||||
pub fn save_to_file(&self, path: &Path) -> IoResult<()> {
|
||||
let mut f = BufferedWriter::new(try!(File::create(path)));
|
||||
|
||||
for l in self.line_iter() {
|
||||
let _ = f.write_str(l.as_str());
|
||||
let _ = f.write_str(line_ending_to_str(l.ending));
|
||||
}
|
||||
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
|
|
|
@ -6,7 +6,6 @@ use formatter::LineFormatter;
|
|||
use formatter::RoundingBehavior::*;
|
||||
use std::old_path::Path;
|
||||
use std::cmp::{min, max};
|
||||
use files::{save_buffer_to_file};
|
||||
use string_utils::grapheme_count;
|
||||
use self::cursor::CursorSet;
|
||||
|
||||
|
@ -85,7 +84,7 @@ impl<T: LineFormatter> Editor<T> {
|
|||
|
||||
pub fn save_if_dirty(&mut self) {
|
||||
if self.dirty && self.file_path != Path::new("") {
|
||||
let _ = save_buffer_to_file(&self.buffer, &self.file_path);
|
||||
let _ = self.buffer.save_to_file(&self.file_path);
|
||||
self.dirty = false;
|
||||
}
|
||||
}
|
||||
|
|
19
src/files.rs
19
src/files.rs
|
@ -1,19 +0,0 @@
|
|||
use std::old_io::{IoResult, BufferedWriter};
|
||||
use std::old_io::fs::File;
|
||||
use std::old_path::Path;
|
||||
|
||||
use buffer::line::{line_ending_to_str};
|
||||
use buffer::Buffer as TextBuffer;
|
||||
|
||||
|
||||
pub fn save_buffer_to_file(tb: &TextBuffer, path: &Path) -> IoResult<()> {
|
||||
// TODO: make save atomic
|
||||
let mut f = BufferedWriter::new(try!(File::create(path)));
|
||||
|
||||
for l in tb.line_iter() {
|
||||
let _ = f.write_str(l.as_str());
|
||||
let _ = f.write_str(line_ending_to_str(l.ending));
|
||||
}
|
||||
|
||||
return Ok(());
|
||||
}
|
|
@ -107,93 +107,3 @@ pub trait LineFormatter {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//====================================================================
|
||||
// UNIT TESTS
|
||||
//====================================================================
|
||||
|
||||
//#[cfg(test)]
|
||||
//mod tests {
|
||||
// #![allow(unused_imports)]
|
||||
// use buffer::line::{Line, LineGraphemeIter};
|
||||
// use super::LineFormatter;
|
||||
//
|
||||
// pub struct TestLineFormatIter<'a> {
|
||||
// grapheme_iter: LineGraphemeIter<'a>,
|
||||
// f: &'a TestLineFormatter,
|
||||
// pos: (usize, usize),
|
||||
// }
|
||||
//
|
||||
// impl<'a> Iterator for TestLineFormatIter<'a> {
|
||||
// type Item = (&'a str, (usize, usize), usize);
|
||||
//
|
||||
// fn next(&mut self) -> Option<(&'a str, (usize, usize), usize)> {
|
||||
// if let Some(g) = self.grapheme_iter.next() {
|
||||
// let pos = self.pos;
|
||||
// self.pos = (pos.0, pos.1 + 1);
|
||||
// return Some((g, pos, 1));
|
||||
// }
|
||||
// else {
|
||||
// return None;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// pub struct TestLineFormatter {
|
||||
// tab_width: u8
|
||||
// }
|
||||
//
|
||||
// impl TestLineFormatter {
|
||||
// pub fn new() -> TestLineFormatter {
|
||||
// TestLineFormatter {
|
||||
// tab_width: 4,
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// impl<'a> LineFormatter<'a, TestLineFormatIter<'a>> for TestLineFormatter {
|
||||
// fn single_line_height(&self) -> usize {
|
||||
// 1
|
||||
// }
|
||||
//
|
||||
// fn iter(&'a self, line: &'a Line) -> TestLineFormatIter<'a> {
|
||||
// TestLineFormatIter {
|
||||
// grapheme_iter: line.grapheme_iter(),
|
||||
// f: self,
|
||||
// pos: (0, 0),
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
// #[test]
|
||||
// fn simple_iterator() {
|
||||
// let line = Line::new_from_str("Hello!");
|
||||
// let mut f = TestLineFormatter::new();
|
||||
// let mut iter = f.iter(&line);
|
||||
//
|
||||
// let (a,_,_) = iter.next().unwrap();
|
||||
// assert_eq!(a, "H");
|
||||
//
|
||||
// let (a,_,_) = iter.next().unwrap();
|
||||
// assert_eq!(a, "e");
|
||||
//
|
||||
// let (a,_,_) = iter.next().unwrap();
|
||||
// assert_eq!(a, "l");
|
||||
//
|
||||
// let (a,_,_) = iter.next().unwrap();
|
||||
// assert_eq!(a, "l");
|
||||
//
|
||||
// let (a,_,_) = iter.next().unwrap();
|
||||
// assert_eq!(a, "o");
|
||||
//
|
||||
// let (a,_,_) = iter.next().unwrap();
|
||||
// assert_eq!(a, "!");
|
||||
//
|
||||
// let a = iter.next();
|
||||
// assert_eq!(a, None);
|
||||
// }
|
||||
//}//
|
|
@ -21,7 +21,6 @@ use term_ui::formatter::ConsoleLineFormatter;
|
|||
mod string_utils;
|
||||
mod buffer;
|
||||
mod formatter;
|
||||
mod files;
|
||||
mod editor;
|
||||
mod term_ui;
|
||||
//mod font;
|
||||
|
|
Loading…
Reference in New Issue
Block a user