зеркало из
https://github.com/glebtv/tui-textarea.git
synced 2026-09-03 14:26:17 +03:00
return if text was modified or not from methods to edit text
Этот коммит содержится в:
@@ -28,6 +28,7 @@ macro_rules! error {
|
||||
struct Buffer<'a> {
|
||||
textarea: TextArea<'a>,
|
||||
path: PathBuf,
|
||||
modified: bool,
|
||||
}
|
||||
|
||||
impl<'a> Buffer<'a> {
|
||||
@@ -44,15 +45,23 @@ impl<'a> Buffer<'a> {
|
||||
TextArea::default()
|
||||
};
|
||||
textarea.set_line_number_style(Style::default().fg(Color::DarkGray));
|
||||
Ok(Self { textarea, path })
|
||||
Ok(Self {
|
||||
textarea,
|
||||
path,
|
||||
modified: false,
|
||||
})
|
||||
}
|
||||
|
||||
fn save(&self) -> io::Result<()> {
|
||||
fn save(&mut self) -> io::Result<()> {
|
||||
if !self.modified {
|
||||
return Ok(());
|
||||
}
|
||||
let mut f = io::BufWriter::new(fs::File::create(&self.path)?);
|
||||
for line in self.textarea.lines() {
|
||||
f.write_all(line.as_bytes())?;
|
||||
f.write_all(b"\n")?;
|
||||
}
|
||||
self.modified = false;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -111,11 +120,13 @@ impl<'a> Editor<'a> {
|
||||
let widget = textarea.widget();
|
||||
f.render_widget(widget, chunks[0]);
|
||||
|
||||
let modified = if buffer.modified { " [modified]" } else { "" };
|
||||
let status = format!(
|
||||
"[{}/{}] {:?}",
|
||||
"[{}/{}] {:?}{}",
|
||||
self.current + 1,
|
||||
self.buffers.len(),
|
||||
buffer.path,
|
||||
modified,
|
||||
);
|
||||
let status =
|
||||
Paragraph::new(status).style(Style::default().add_modifier(Modifier::REVERSED));
|
||||
@@ -161,7 +172,10 @@ impl<'a> Editor<'a> {
|
||||
self.buffers[self.current].save()?;
|
||||
self.message = Some("Saved!");
|
||||
}
|
||||
input => self.buffers[self.current].textarea.input(input),
|
||||
input => {
|
||||
let buffer = &mut self.buffers[self.current];
|
||||
buffer.modified = buffer.textarea.input(input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,9 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||
loop {
|
||||
match events.recv()? {
|
||||
Event::Key(Key::Esc) => break,
|
||||
Event::Key(key) => textarea.input(key),
|
||||
Event::Key(key) => {
|
||||
textarea.input(key);
|
||||
}
|
||||
Event::Tick => {}
|
||||
}
|
||||
term.draw(|f| {
|
||||
|
||||
Ссылка в новой задаче
Block a user