on master help sign in
snapshot
commitbe3c02104600e5bba8e3af7bc9787e62cba30183 authorBlaž Hrastnik <blaz@mxxn.io> dateMon 7 Dec 2020, 15:18 (6 years ago) parent83f2c24
2 files changed+17−7
helix-term/src/application.rs+8−6 helix-term/src/compositor.rs+9−1
helix-term/src/application.rs+8−6
@@ -8,7 +8,7 @@ use helix_view::{
88 Document, Editor, Theme, View,
99};
1010
11−use crate::compositor::{Component, Compositor};
11+use crate::compositor::{Component, Compositor, EventResult};
1212
1313use log::{debug, info};
1414
@@ -383,7 +383,7 @@ impl EditorView {
383383}
384384
385385impl Component for EditorView {
386− fn handle_event(&mut self, event: Event, executor: &smol::Executor) -> bool {
386+ fn handle_event(&mut self, event: Event, executor: &smol::Executor) -> EventResult {
387387 match event {
388388 Event::Resize(width, height) => {
389389 // TODO: simplistic ensure cursor in view for now
@@ -392,6 +392,7 @@ impl Component for EditorView {
392392 view.size = (width, height);
393393 view.ensure_cursor_in_view()
394394 };
395+ EventResult::Consumed(None)
395396 }
396397 Event::Key(event) => {
397398 // if there's a prompt, it takes priority
@@ -400,6 +401,7 @@ impl Component for EditorView {
400401 .as_mut()
401402 .unwrap()
402403 .handle_input(event, &mut self.editor);
404+ EventResult::Consumed(None)
403405 } else if let Some(view) = self.editor.view_mut() {
404406 let keys = vec![event];
405407 // TODO: sequences (`gg`)
@@ -511,12 +513,13 @@ impl Component for EditorView {
511513 }
512514 }
513515 }
516+ EventResult::Consumed(None)
517+ } else {
518+ EventResult::Ignored
514519 }
515520 }
516− Event::Mouse(_) => (),
521+ Event::Mouse(_) => EventResult::Ignored,
517522 }
518−
519− true
520523 }
521524 fn render(&mut self, renderer: &mut Renderer) {
522525 const OFFSET: u16 = 7; // 1 diagnostic + 5 linenr + 1 gutter
@@ -569,7 +572,6 @@ impl<'a> Application<'a> {
569572 }
570573
571574 fn render(&mut self) {
572− // v2:
573575 self.renderer.surface.reset(); // reset is faster than allocating new empty surface
574576 self.compositor.render(&mut self.renderer); // viewport,
575577 self.renderer.draw_and_swap();
helix-term/src/compositor.rs+9−1
@@ -18,9 +18,17 @@ use crossterm::event::Event;
1818use smol::Executor;
1919use tui::buffer::Buffer as Surface;
2020
21+pub(crate) type Callback = Box<dyn Fn(&mut Compositor)>;
22+
23+// Cursive-inspired
24+pub(crate) enum EventResult {
25+ Ignored,
26+ Consumed(Option<Callback>),
27+}
28+
2129pub(crate) trait Component {
2230 /// Process input events, return true if handled.
23− fn handle_event(&mut self, event: Event, executor: &Executor) -> bool;
31+ fn handle_event(&mut self, event: Event, executor: &Executor) -> EventResult;
2432 // , args: ()
2533
2634 /// Should redraw? Useful for saving redraw cycles if we know component didn't change.