aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hrastnik2020-06-19 00:14:29 +0000
committerJan Hrastnik2020-06-19 00:14:29 +0000
commite93b15cef3d9274a95ac4342e777d240856e5803 (patch)
tree4f2ab662d75d21511a71c5246c197c1542422455
parent8958f06f0824965d030adc7522303129da014315 (diff)
created view struct
-rw-r--r--helix-core/src/state.rs3
-rw-r--r--helix-term/src/editor.rs43
2 files changed, 41 insertions, 5 deletions
diff --git a/helix-core/src/state.rs b/helix-core/src/state.rs
index 8ebf3887..429a4dd4 100644
--- a/helix-core/src/state.rs
+++ b/helix-core/src/state.rs
@@ -120,8 +120,7 @@ impl State {
pub fn file(&self) -> &Rope {
// used to access file contents for rendering to screen
- let copy = &self.doc.contents;
- copy
+ &self.doc.contents
}
}
diff --git a/helix-term/src/editor.rs b/helix-term/src/editor.rs
index 3df84d6e..1ce5c8f6 100644
--- a/helix-term/src/editor.rs
+++ b/helix-term/src/editor.rs
@@ -16,13 +16,35 @@ use anyhow::Error;
use crate::{keymap, Args};
use helix_core::{Buffer, State};
+pub struct View<'a> {
+ x: u16,
+ y: u16,
+ contents: &'a str,
+}
+
+impl View<'_> {
+ pub fn render(&self) {
+ execute!(
+ stdout(),
+ cursor::MoveTo(self.x, self.y),
+ Print(self.contents)
+ );
+ }
+}
+
pub struct Editor {
state: Option<State>,
+ current_line: u16,
+ size: (u16, u16),
}
impl Editor {
pub fn new(mut args: Args) -> Result<Self, Error> {
- let mut editor = Editor { state: None };
+ let mut editor = Editor {
+ state: None,
+ current_line: 0,
+ size: terminal::size().unwrap(),
+ };
if let Some(file) = args.files.pop() {
editor.open(file)?;
@@ -38,10 +60,25 @@ impl Editor {
Ok(())
}
- fn render(&self) {
+ fn render(&mut self) {
// TODO:
+
match &self.state {
- Some(s) => execute!(stdout(), cursor::MoveTo(0, 0), Print(s.file())).unwrap(),
+ Some(s) => {
+ for line in s
+ .file()
+ .lines_at(self.current_line as usize)
+ .take(self.size.1 as usize)
+ {
+ let view = View {
+ x: 0,
+ y: self.current_line,
+ contents: line.as_str().unwrap(),
+ };
+ view.render();
+ self.current_line += 1;
+ }
+ }
None => (),
}
}