diff options
author | Blaž Hrastnik | 2020-10-19 07:20:59 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2020-12-03 04:04:42 +0000 |
commit | b2b3083a623ec3dc5e2d1ea9c6ba35970efe19a3 (patch) | |
tree | b9d55c8035619a99bad7c15e0a9d7676a76b771a | |
parent | 13cb442850ac3cd4b884a62711f0eb8740270d74 (diff) |
Support multiple open views.
-rw-r--r-- | helix-term/src/application.rs | 13 | ||||
-rw-r--r-- | helix-view/src/editor.rs | 18 |
2 files changed, 20 insertions, 11 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 1e719f5f..9c90b6f3 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -354,7 +354,7 @@ impl Application { fn render(&mut self) { let viewport = Rect::new(OFFSET, 0, self.terminal.size.0, self.terminal.size.1 - 2); // - 2 for statusline and prompt - if let Some(view) = &mut self.editor.view { + if let Some(view) = self.editor.view_mut() { self.terminal.render_view(view, viewport); if let Some(prompt) = &self.prompt { if prompt.should_close { @@ -368,11 +368,8 @@ impl Application { self.terminal.draw(); // TODO: drop unwrap - self.terminal.render_cursor( - self.editor.view.as_ref().unwrap(), - self.prompt.as_ref(), - viewport, - ); + self.terminal + .render_cursor(self.editor.view().unwrap(), self.prompt.as_ref(), viewport); } pub async fn event_loop(&mut self) { @@ -392,7 +389,7 @@ impl Application { self.terminal.resize(width, height); // TODO: simplistic ensure cursor in view for now - if let Some(view) = &mut self.editor.view { + if let Some(view) = self.editor.view_mut() { view.size = self.terminal.size; view.ensure_cursor_in_view() }; @@ -408,7 +405,7 @@ impl Application { .handle_input(event, &mut self.editor); self.render(); - } else if let Some(view) = &mut self.editor.view { + } else if let Some(view) = self.editor.view_mut() { let keys = vec![event]; // TODO: sequences (`gg`) // TODO: handle count other than 1 diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index c292caed..08fd1f0c 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -5,20 +5,32 @@ use std::path::PathBuf; use anyhow::Error; pub struct Editor { - pub view: Option<View>, + pub views: Vec<View>, + pub focus: usize, pub should_close: bool, } impl Editor { pub fn new() -> Self { Self { - view: None, + views: Vec::new(), + focus: 0, should_close: false, } } pub fn open(&mut self, path: PathBuf, size: (u16, u16)) -> Result<(), Error> { - self.view = Some(View::open(path, size)?); + let pos = self.views.len(); + self.views.push(View::open(path, size)?); + self.focus = pos; Ok(()) } + + pub fn view(&self) -> Option<&View> { + self.views.get(self.focus) + } + + pub fn view_mut(&mut self) -> Option<&mut View> { + self.views.get_mut(self.focus) + } } |